使用 slug 或路径重写打开 WordPress 页面的规则

问题描述 投票:0回答:1

我一直在开发 WordPress 多语言主题,我正在尝试使用

add_rewrite_rule
功能访问我的网站页面。这是我的代码的一部分:

add_rewrite_rule( "^($language)/(.*)$", 'index.php?pagename=$matches[2]&language=$matches[1]', "top" );

这里我有一个名为

$language
的变量,它是一个类似“en”的语言代码。然后,当我访问一个页面后跟“en”slug(如
https://example.com/en/blog
)效果很好,但它仅适用于注册页面,不适用于帖子和其他帖子类型。

我可以将

pagename
参数更改为
postname
但页面将无法工作。所以我正在寻找一种使用他们的 slug 打开页面或帖子的方法,例如:

add_rewrite_rule( "^($language)/(.*)$", 'index.php?path=$matches[2]...', "top" );

因此,当我访问

https://example.com/en/blog
时,就像我正在访问
https://example.com/blog
,无论 blog 是页面还是帖子。

我找到了 index.php 的一些其他可接受的参数,例如

tagname
search
lang
等,但它们都不是我要找的。

注意:我已经完成了检测语言并更改语言环境、内容和其他内容的部分,我只是在寻找一种显示内容的方法。

这也是我自己的,所以我有完全的访问/编辑代码的权利,所以我愿意接受任何其他建议来做到这一点。谢谢你。

php wordpress themes multilingual
1个回答
0
投票

您可以尝试使用

name
而不是
pagename
postname
来通过其 slug 匹配任何帖子类型:

add_rewrite_rule( "^($language)/(.*)$", 'index.php?name=$matches[2]&language=$matches[1]', "top" );

然后您可以解析您的查询,例如:

function my_theme_parse_request($query) {
    if (isset($query['name']) && isset($query['language'])) {
        $name = $query['name'];
        $language = $query['language'];

        // Use $name and $language to retrieve and display content in the appropriate language
        // Example:
        $post = get_page_by_path($name, OBJECT, $post_type); // Check for both pages and posts
        if ($post) {
            // your post/page template
        }
    }
}
add_action('parse_query', 'my_theme_parse_request');
© www.soinside.com 2019 - 2024. All rights reserved.