关联“ADD_REWRITE_ENDPOINT”和“$_GET”

时间:2018-11-07 作者:l6ls

我有一门i18n课程。

类find lang标记。例如:"?lang=en"

我想让它和subdir一起工作。例如:eg.com/eneg.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\'))) 像这样解决它。

1 个回复
最合适的回答,由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 ) {

}

结束

相关推荐

Dynamic Endpoints

我在WordPress外部有一个数据库表,需要为其创建端点。我已经创建了一个页面/cars/ 我计划使用页面模板生成链接。我希望url看起来像/cars/camaro/ ()/cars/%model%/ ). 起初,我认为我可以使用端点,但不知道如何根据从模型表中提取的段塞使它们动态。我也不确定使用Permalink结构标签是更容易还是更好。我甚至不完全确定从哪里开始,我以前创建过“静态”端点,所以我有一个基础可以跳出,但当我到达request 我不知道该怎么办。/** * Add endpoi