我将kaiser的解决方案与我在网上找到的其他解决方案相结合,使其更具动态性和防弹性。
此外,在wp codex中还提到:使用template\\u redirect action hook加载不同的模板不是一个好方法。如果包含另一个模板,然后使用exit()(或die()),则不会运行后续的template\\u重定向挂钩。。。
我让这一切充满活力。您可以说:第X页的子级使用模板Zset 在管理界面中为第X页的子项创建模板,然后使用此模板(正好用于该子项)。
下面是一个解决方案(如果第X页的子项重定向到…)
function jnz_is_child( $pid ) {
global $post;
$ancestors = get_post_ancestors( $post->$pid );
$root = count( $ancestors ) - 1;
$parent = $ancestors[$root];
if( is_page() && ( $post->post_parent === $pid || in_array( $pid, $ancestors ) ) ) {
return true;
} else {
return false;
}
};
function wpse140605_template_redirect( $template ) {
if ( $template === locate_template(\'page.php\') ) { // if template is not set in admin interface
if ( jnz_is_child( 656 ) || jnz_is_child( 989 ) ) {
$new_template = locate_template( array( \'page-whatever.php\' ) ); // if template file exist
if ( \'\' != $new_template ) {
return $new_template ;
}
}
}
return $template;
};
add_filter( \'template_include\', \'wpse140605_template_redirect\', 99 );
所以基本上在第一个函数中
jnz_is_child()
, 我检查页面是否是第X页的子级(甚至是X的子级…)按页面ID。
在第二个函数中wpse140605_template_redirect()
我做替换(如果是父页面=== 656
或=== 989
: 使用模板page-whatever.php
). 当然,第二个函数可以包含多个if / else if
闭包,再加上此函数检查模板文件是否存在。因为如果它不存在,php将抛出一个错误。
第一个函数也可以在主题内的任何其他地方使用(如is_page()
等等)。
这里是另一个if子变量,其中甚至选择了当前元素(is\\u page和is\\u child的组合):
function jnz_is_child( $pid ) {
global $post;
$ancestors = get_post_ancestors( $post->$pid );
if( is_page() && ( is_page( $pid ) || $post->post_parent === $pid || in_array( $pid, $ancestors ) ) ) {
return true;
} else {
return false;
}
};