仅列出来自母版父级的页面

时间:2014-02-19 作者:James B

我在一个页面上有一个菜单,显示父页面的子页面,但是,如果单击子页面,则此导航中仅显示子页面的子页面。是否可以拥有母版母版页的直接子级?

我目前正在使用以下内容:

$thispage = $wp_query->post;
if($thispage->post_parent!=0){
    wp_list_pages("title_li=&child_of=".$thispage->post_parent);
}else{
    wp_list_pages("title_li=&child_of=".$thispage->ID);
}

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

这就是我在一些项目中使用的方法,这些项目总是显示子页面,即使您正在查看子页面。看看这是不是你想的

<?php
if(!$post->post_parent){
    // will display the subpages of this top level page
    $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
    $ancestors = $post->ID;
}else{
    // diplays only the subpages of parent level
    //$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
    if($post->ancestors){
        // now you can get the the top ID of this page
        // wp is putting the ids DESC, thats why the top level ID is the last one
        $ancestors = end(get_post_ancestors( $post->ID ));
        $children = wp_list_pages("title_li=&child_of=".$ancestors."&echo=0");
        // you will always get the whole subpages list
    }
}
if ($children) { ?>
    <div class="feature-box">
    <div class="feature-title">Related Links</div>
    <div class="subnav subnav-parent-<?php echo $ancestors; ?>">
        <ul>
            <?php echo $children; ?>
        </ul>
    </div>
</div>
<?php } ?>

SO网友:Tom J Nowell

您当前的逻辑是:

if we are a root page: ( we\'re 1 level deep! )
    show the children!
but if we are not a root page: ( we\'re 2 levels deep! )
    show the siblings/parents children!
你的问题是,当你到达一个三层的页面时会发生什么?我们可以检查我们是否有父母,但我们还需要检查父母是否也有父母,也就是祖父母。

这样就可以做到:

if we are a root page: ( we\'re 1 level deep! )
    show the children!
but if we are not a root page: ( we\'re 2 or more levels deep! )
    get the parent post
    does the parent post have a parent too? AKA  a grandparent ( we\'re 3 levels deep! )
        show the grand parents children!
    but if the parent post does not have a parent ( we\'re 2 levels deep! )
        show the parents children!
但很明显,这无法扩展!4层深怎么样?5层深?如果我的页面有一个父级,它有一个父级,它有另一个父级,该怎么办?级别太多!如此混乱,如此多嵌套的if-else语句。

那么我们如何正确地做到这一点呢?

递归

为了得到真正可靠的答案,我们需要使用递归函数。我们不知道我们有多少层,所以我们不能解释每一层。如果没有巨大的if-else语句和噩梦般的代码。

因此,让我们做一些类似的事情:

For post A
do the "show posts" routine to A
其中,“显示帖子”是:

show posts:
    if A has no parent
        Display the children!!
    but if A DOES has a parent
        do the "show posts" routine on that parent
在更多类似PHP的代码中:注意,这是伪代码,而不是实际代码

function showPosts( $post ) {
    if ( $post->post_parent == 0 ) {
        // display the child posts
    } else {
        // go up one level and try again
        showPosts( $post->post_parent );
    }
}
$this_page = $wp_query->post;
showPosts( $this_page );
现在,我们有了一个适用于1层深度、2层深度、3层深度的东西。。。。。5000层深、5001层深等

结束

相关推荐

WordPress后台:如何在Pages-->All Pages下隐藏某些特定页面

我有一些带有短代码的页面,我不想让我的客户看到带有短代码的页面。是否有方法将这些页面隐藏在“页面-->所有页面”下,但应显示在“菜单”下。有没有插件可以实现这一点?我已经找过了,但没有找到。