我有一门i18n课程。
类find lang标记。例如:"?lang=en"
我想让它和subdir一起工作。例如:eg.com/en
和eg.com/hello-world/en
为此,我使用:add_rewrite_endpoint
function lang_add_endpoints(){
global $wp_rewrite;
add_rewrite_endpoint(\'en\', EP_ALL);
$wp_rewrite->flush_rules();
}
add_action(\'init\', \'lang_add_endpoints\');
但课堂上
lang
标签为此,我使用:
add_rewrite_rule
function custom_rewrite_basic() {
global $wp_rewrite;
add_rewrite_rule(\'^en/?\', \'index.php?lang=en\', \'top\');
$wp_rewrite->flush_rules();
}
add_action(\'init\', \'custom_rewrite_basic\');
但我测试过
$_GET[\'lang\']
不要设置。
所以我想,所有:页面、帖子、归档和主页支持“/en/”子目录。还有这场火灾$_GET["lang"] = "en"
现在我用以下方法解决:
function lang_add_endpoints(){
add_rewrite_endpoint(\'lang\', EP_ALL);
}
add_action(\'init\', \'lang_add_endpoints\');
以及
if(get_query_var(\'lang\')) $_GET["lang"] = get_query_var(\'lang\');
eg.com/anypost/lang/en
这项工作现在开始。但我想去掉朗斯拉格
/lang/
eg.com/anypost/en
这是如何开火$_GET["lang"] = "en"
我尝试:get_query_var(\'en\')
不要设置,因为/en/
没有价值。
我想if(isset(get_query_var(\'en\')))
像这样解决它。
最合适的回答,由SO网友:Jacob Peattie 整理而成
使用添加的查询参数add_rewrite_endpoint()
可使用get_query_var()
.
所以如果你注册/en/
作为端点:
function wpse_318560_en_endpoint(){
add_rewrite_endpoint(\'en\', EP_ALL);
}
add_action(\'init\', \'wpse_318560_en_endpoint\' );
不刷新重写规则
init
. 重写规则只需刷新一次。看见
this note 在开发人员文档中,可以找到一种以编程方式正确刷新重写规则的方法。
然后您可以使用get_query_var()
检查端点是否存在。
需要注意的一点是get_query_var
返回查询变量的值。添加端点时,端点的“值”是/en/
在URL中。在您的用例中,这将是一个空字符串:\'\'
. 需要注意的是get_query_var()
什么时候/en/
缺少也是\'\'
.
因此,要正确检查/en/
是在URL中设置的,则需要使用get_query_var()
将默认值更改为false
:
// example.com/page/
get_query_var( \'en\' ); // \'\'
get_query_var( \'en\', false ); // false
// example.com/page/en/
get_query_var( \'en\' ); // \'\'
get_query_var( \'en\', false ); // \'\'
以便正确检查
/en/
您需要这样做:
if ( get_query_var( \'en\', false ) !== false ) {
}