我有一门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_rulefunction 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 ) {
}