我一直在开发 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
等,但它们都不是我要找的。
注意:我已经完成了检测语言并更改语言环境、内容和其他内容的部分,我只是在寻找一种显示内容的方法。
这也是我自己的,所以我有完全的访问/编辑代码的权利,所以我愿意接受任何其他建议来做到这一点。谢谢你。
您可以尝试使用
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');