使用ADD_REWRITE_TAG为页面部分创建URL

时间:2013-07-24 作者:Niels

我正在将我的页面模板划分为可链接的区域。我希望能够使用干净的URL来做到这一点。

我的页面URL看起来是这样的www.example.com/page-name/?section=example

我想将url重写为www.example.com/page-name/example

我一直在寻找答案,但我还没找到答案。

add_action(\'init\',\'thick_section_rewrite\');

function thick_section_rewrite(){

    add_rewrite_tag([what goes here?], \'([^&/]+)\');
    add_rewrite_rule( [what goes here?], \'?section=$matches[1]\', \'top\' );

}
我应该在add_rewrite_ruleadd_rewrite_tag?

1 个回复
最合适的回答,由SO网友:Milo 整理而成

所需结构的问题是,添加重写规则以拦截附加到页面URL的任何内容将覆盖并中断子页面。在您的示例中:

www.example.com/page-name/example
是的example 的节或子页page-name? 要兼顾这两种情况并不那么简单。

解决这个问题的一个非常快速和简单的方法是在URL的中间添加一些独特的内容,以表示一个节而不是一个子页面。这可以通过add_rewrite_endpoint, WordPress将负责生成适当的重写规则以使其正常工作。

function wpa_rewrite_endpoint(){
    add_rewrite_endpoint( \'section\', EP_PAGES );
}
add_action( \'init\', \'wpa_rewrite_endpoint\' );
现在,任何级别的页面都可以section/section-name/ 附加,例如:

www.example.com/page-name/section/example/
或:

www.example.com/page-name/child-page-name/section/example/
然后可以通过get_query_var:

$this_section = get_query_var( \'section\' );
编辑另一个可能的类似选项,具体取决于您的要求-例如,如果您的所有分区名称都是固定的,则只有3个可能的分区:introduction, body, 和conclusion, 您可以使用add_rewrite_endpoint 对于每个部分,请将其命名为各部分的名称:

function wpa_rewrite_endpoint(){
    add_rewrite_endpoint( \'intro\', EP_PAGES );
    add_rewrite_endpoint( \'body\', EP_PAGES );
    add_rewrite_endpoint( \'conclusion\', EP_PAGES );
}
add_action( \'init\', \'wpa_rewrite_endpoint\' );
然后,您可以拥有URL:

www.example.com/page-name/intro/
www.example.com/page-name/body/
www.example.com/page-name/conclusion/
不过,这里要确定加载的节有点不同,因为您现在没有任何查询变量的值,它们都是空的,所以您必须检查它们是否存在于查询变量数组中。

if( array_key_exists( \'intro\', $wp_query->query_vars ) ){
    echo \'intro requested!\';
}

结束