WP-查询,拉取父页面的子页

时间:2014-08-21 作者:authorandrew

所以我想做的是:我想开发一个主题,显示父页面上的任何子页面。我通过一个WP\\u查询和一个简单的循环成功地运行了它:

<!--show sub pages on this page-->
<?php $childargs = array( \'post_parent\' => $post->ID, \'post_type\' => \'page\', \'posts_per_page\' => \'-1\', \'orderby\' => \'menu_order\', \'order\' => \'ASC\' );      
$child = new WP_Query($childargs);

// only show the navbar on pages with sub-children
if ($child->have_posts()) { ?>
    <div class="sub">
    <div class="pw">
        <?php if ($child->have_posts()) : while ($child->have_posts()) : $child->the_post(); ?>
            <a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
        <?php endwhile; endif;

        wp_reset_query(); ?>
    </div>
    </div><!--sub-->
<?php } ?>
这段代码在子页面本身上完全不显示任何内容,这是正确的行为。我想让子页面显示这个导航,但我不知道怎么做$childargs引用postid,对于子页面,postid将是子页面(它自己没有子页面)。

如何修改此代码,使其不仅显示在父页面上,还显示在子页面上?可以在此处找到演示页面:http://sheepish-lab637.com/one/about/ 有自己的子代。

编辑:也许Wordpress菜单可以更好地实现这一点,它还具有捆绑默认的current\\u page\\u item类等优点。

谢谢

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

如果是子页面post_parent 将是非零值,因此您可以检查:

if( 0 == $post->post_parent ){
    // no parent, get children of this page
    $childargs[\'post_parent\'] = $post->ID;
} else {
    // has parent, get children of parent page
    $childargs[\'post_parent\'] = $post->post_parent;
}
这是假设您的子页面仅比父页面低一个级别。否则,您可以使用get_post_ancestors, 并获取最高级别父级的ID:

$parents = get_post_ancestors( $post->ID );
$top_level_page = $parents[ count($parents) - 1 ];

结束

相关推荐

Featured posts and the loop

我正在尝试在索引中添加一个框。php在何处显示最新的3篇特色帖子。根据this tutorial, 我已将以下内容添加到functions.php:add_theme_support( \'featured-content\', array( \'filter\' => \'magdeleine_get_featured_posts\', \'max_posts\' => 3, ) ); function magdeleine