显示兄弟姐妹(如果有)和父母

时间:2016-06-21 作者:Markus Ossi

我的问题涉及显示当前页面的父母和兄弟姐妹。

如果我在level 2页面上,我想显示没有孩子的兄弟姐妹。如果我在level 3页面上,我想显示兄弟姐妹、父母和父母的兄弟姐妹。

例如,如果我的页面级别如下:

动物(1级)
-鱼类(2级)
-鲑鱼(3级)
-鳟鱼
-梭子鱼
-哺乳动物
-狗
-猫
植物

如果我在页面Fish上,我想向兄弟姐妹展示:

鱼类哺乳动物

如果我在页面Salmon上,我想显示兄弟姐妹、父母和父母兄弟姐妹:

鱼类-鲑鱼-鳟鱼-狗鱼-哺乳动物

我当前的代码如下所示:

<?php
if($post->post_parent)
$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0&sort_column=menu_order");
else $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0&sort_column=menu_order");
if ($children) { ?>
<ul><?php echo $children; ?></ul>
<?php } ?>

1 个回复
SO网友:Andy Macaulay-Brook

目前,您的代码几乎可以正常工作,但它会检查当前页面是否有父级,这对于第二级和第三级页面都是正确的。

WordPress为我们提供了get\\u祖先来检索任何层次对象类型的有序祖先数组:

get_ancestors( $object_id, $object_type );
所以我们可以使用get_ancestors( $post->ID, \'page\' ) 并计算元素,以帮助我们获得适合您导航的深度。

if($post->post_parent) {

    $ancestors = get_ancestors( $post->ID, \'page\' );

    if ( 1 == count( $ancestors ) ) {

            echo \'<ul>\';

            wp_list_pages(
                array (
                    \'title_li\' => \'\',
                    \'sort_column\' => \'menu_order\',
                    \'child_of\' => $ancestors[0],
                    \'depth\' => 1
                ) 
            );

            echo \'</ul>\';

    }

    if ( 2 == count( $ancestors ) ) {

            echo \'<ul>\';

            wp_list_pages(
                array (
                    \'title_li\' => \'\',
                    \'sort_column\' => \'menu_order\',
                    \'child_of\' => $ancestors[1],
                    \'depth\' => 2
                ) 
            );

            echo \'</ul>\';

    }


}
您可以更巧妙地处理逻辑,例如从祖先数组中弹出最后一个元素,但为了清晰起见,我将其保留为详细内容。

相关推荐

如何列出带有摘录的子页,例如[Child-Pages Depth=“1”Excerpt=“1”]

我想构建一个快捷码函数来生成父页面的子页面的HTML列表,并包含摘录。类似这样:<ul> <li> <h3>Child Page Title 1</h3> <p>Excerpt 1</p> <li> <li> <h3>Child Page Title 2</h3> <p>Exc