Wordpress php:测试页面是否是父页面的子项的方法?

时间:2009-05-21 03:07:06

标签: php wordpress parent if-statement

在我的第一个Wordpress网站上工作,所以我确信这是一个非常基本的问题。我正在努力编写一个条件php语句,当页面是父页面的子页面时执行某个操作。

例如,我不想只指定一个页面,而是指定将“关于我们”页面作为父页面的所有页面:

<?php if (is_page('About Us')) echo 'Hello World!'; ?>

我尝试过“child_of”功能,但并不像我希望的那样简单。

当我使用下面的内容时,我收到语法错误 - 可能只是我不知道如何使用该函数:

<?php if (child_of('About Us')) echo 'Hello World!'; ?>

有什么建议吗?

5 个答案:

答案 0 :(得分:3)

您收到错误,因为WordPress中没有child_of()函数。

child_of()是一种使用get_pages()函数进行搜索的方法。

$pages = get_pages('child_of=##');

其中##是“关于我们”页面的数字ID(不是名称)。

答案 1 :(得分:2)

将以下功能添加到 functions.php 主题文件中:

function is_tree($pid) {      // $pid = The ID of the page we're looking for pages underneath
    global $post;         // load details about this page
    $anc = get_post_ancestors( $post->ID );
    foreach($anc as $ancestor) {
        if(is_page() && $ancestor == $pid) {
            return true;
        }
    }
    if(is_page()&&(is_page($pid))) 
               return true;   // we're at the page or at a sub page
    else 
               return false;  // we're elsewhere
};

然后您可以使用以下内容:

if(is_tree('2')){ // 2 being the parent page id
   // Do something if the parent page of the current page has the id of two
}

参考:http://codex.wordpress.org/Conditional_Tags

答案 2 :(得分:1)

您希望从子页面链接到父页面的简单解决方案; $ post-&gt; post_parent保存页面父级的ID(如果有),如果没有,则为0:

<?php
if($post->post_parent !== 0){               
    print '<a href="'.get_permalink($post->post_parent).'">&larr; Back</a>';    
}
?>

因此,对于这种情况,您需要更改if()以检查$ post-&gt; post_parent == $ id_of_about_page。

答案 3 :(得分:0)

这是对我有用的最终代码 - 不确定这是否是我正在尝试做的正确方法,但是会为任何有相同问题的人发布帖子。

我有一组右侧列,每个列都特定于站点的一部分(每个父页面代表站点的一部分)。

我希望父页面和所有父页面的子页面都拉出相同的特定右侧列。

这就是我的所作所为:

<?php 

if (is_page('Page Name 1') || $post->post_parent == '##') {
include (TEMPLATEPATH . '/right-1.php');

} elseif (is_page('Page Name 2') || $post->post_parent == '##') {
include (TEMPLATEPATH . '/right-2.php');

} elseif (is_page('Page Name 3') || $post->post_parent == '##') {
include (TEMPLATEPATH . '/right-3.php');

} elseif (is_page('Page Name 4') || $post->post_parent == '##')
include (TEMPLATEPATH . '/right-4.php');

?>

##表示页面的ID#。

答案 4 :(得分:0)

这个代码为我们解决了这个问题,因为任何一个人都想知道这个问题:

<?php
    global $post;
    if ($post->post_parent == 9) {

        echo 'blah blah';

}; ?>

“9”是父页面的id。