所需结构的问题是,添加重写规则以拦截附加到页面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!\';
}