在当前主题文件命名层次结构中,是否可以为作为特定页面子级的所有页面定义模板?例如,在此导航中:
关于我们
联系我们是谁消息声明有没有办法制作一个名为以下内容的主题文件:
关于我们所有人的页面。php
这将自动应用于所有属于“关于我们”的子页面?
UPDATE
我接受了贝因特建议的修改版本。下面是我最终得到的后代函数:
function is_descendant($ancestor, $tofind = 0) {
global $post;
if ($tofind == 0) $tofind = $post->ID;
$arrpostids = get_post_ancestors($tofind);
$arrpostslugs = array();
foreach($arrpostids as $postid) {
$temppost = get_post($postid);
array_push($arrpostslugs, $temppost->post_name);
}
return (in_array($ancestor, $arrpostids) || in_array($ancestor, $arrpostslugs));
}
// Example use:
is_descendant(\'about-us\');
is_descendant(123);
is_descendant(\'about-us\', 134);
这允许我使用父代ID或slug来验证它是子代。我担心,如果父页面被意外破坏,仅使用ID可能会导致问题。如果不必编辑主题文件,就无法再次使用该ID。对于slug,至少可以选择跳入并创建具有相同slug和层次结构的新页面。
最合适的回答,由SO网友:Bainternet 整理而成
我有一个方便的定制条件函数,可以为您完成这项工作。
The function:
function is_child_page($page = NULL){
global $post;
if ($page == NULL){
$p = get_post($post->ID);
if ($p->post_parent > 0 ){
return true;
}else{
return false;
}
}
$args = array( \'child_of\' => (int)$page);
$pages = get_pages($args);
foreach ($pages as $p){
if ($p->ID == $post->ID){
return true;
break;
}
}
return false;
}
Usage:
if (is_child_page()){
//this page has a parent page
}
if (is_child_page(23)){
//this page is a child page of the page with the ID of 23
}
Now you ask how can this help you?
将此函数保存在主题函数中后。php文件编辑主题的
page.php
在最顶端归档并添加如下内容:
if (is_child_page(12)){
include (TEMPLATEPATH . \'/page-about-us-all.php\');
exit();
}
你完了!注意:此代码假设您的关于页面id为:12,主题文件的名称为:
page-about-us-all.php
.
SO网友:Jon Lay
这可以简单得多,并且不依赖于单独的函数。
假设我们要检查当前页面是否是page的子页面134, 将以下内容放入page.php
就足够了:
<?php
if (134 == $post->post_parent) {
include (TEMPLATEPATH . \'/page-mysubpagetemplate.php\'); // Name this for your child page template name
exit();
} else {
// Do something else
// You might want to stick your regular page.php code in here, or alternatively, you could call another template
}; ?>