WordPress菜单显示兄弟姐妹和当前页面的儿童

时间:2014-05-15 23:58:54

标签: php wordpress

我的目标:

这有点棘手,所以请耐心等待。我在WordPress网站上有一个3层页面组织:

Tier 1
- Tier 2
- Tier 2
    - Tier 3
    - Tier 3
- Tier 2
- Tier 2
    - Tier 3
- Tier 2

如果我使用wp_list_pages,我可以获得一个页面列表。我只需要显示某些页面。我把它分成四组。用户位于Tier 1页面,Tier 2页面中没有子项,Tier 2页面包含子项,或Tier 3页面。

第1层所需结果:

- Tier 2
- Tier 2
- Tier 2
- Tier 2
- Tier 2

第2层所需结果(如果Page没有孩子):

- Tier 2 (<- Active Page)
- Tier 2
- Tier 2
- Tier 2
- Tier 2

第2层所需结果(如果Page确实有孩子):

- Tier 2
- Tier 2 (<- Active Page)
    - Tier 3
    - Tier 3
- Tier 2
- Tier 2
- Tier 2

第3层所需结果

- Tier 2
- Tier 2
    - Tier 3 (<- Active Page)
    - Tier 3
- Tier 2
- Tier 2
- Tier 2

我的尝试:

<?php 

if ($post->post_parent) { //SUB PAGE

    $depth = 1;

    if ( count(get_pages('child_of=' . $post->ID)) )   { $depth=0; }

    $children = wp_list_pages("sort_column=post_date&title_li=&child_of=".$post->post_parent."&echo=0&depth=1");

}

else { //TOP PAGE

    echo "Level 1";

    $children = wp_list_pages("sort_column=post_date&title_li=&child_of=".$post->ID."&echo=0&depth=1");

} ?>

<ul id="subNav">

    <?php echo $children; ?> 

</ul>

当前结果

以上代码几乎可以使用。 Tier 1有效,Tier 2没有孩子工作。但是带有孩子的Tier 3会显示所有孩子,而不仅仅是当前页面的孩子。有人告诉我这可以用CSS完成,如果我真的必须这样做,但我真的很喜欢完整的PHP解决方案。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

有了这个我有第4级工作,希望它会帮助你,调整它编辑一个$ parent = $ ancestors [0];等等,你也可以取消注释//回显以查看最新情况以及在哪里:)问候

    <?php if(is_page()){
$ancestors = get_post_ancestors($post);

if (count($ancestors) == 0) {
    $children = wp_list_pages("sort_column=post_date&title_li=&child_of=".$post->ID."&echo=0&depth=1");
     //echo 'test0';
}elseif (count($ancestors) == 1) {
    $parent = $ancestors[0];
    $children = wp_list_pages("sort_column=menu_order&title_li=&child_of=" .$parent. "&echo=0");
    //echo 'test1';
 }elseif (count($ancestors) == 2) {
    $parent = $ancestors[1];
    $children = wp_list_pages("sort_column=menu_order&title_li=&child_of=" .$parent. "&echo=0");
    //echo 'test2';
 }elseif (count($ancestors) == 3) {
    $parent = $ancestors[2];
    $children = wp_list_pages("sort_column=menu_order&title_li=&child_of=" . $parent. "&echo=0");
    //echo 'test3';
}elseif (count($ancestors) == 4) {
    $parent = $ancestors[3];
    $children = wp_list_pages("sort_column=menu_order&title_li=&child_of=" . $parent . "&echo=0");
    //echo 'test4';
}
  ?>

    <?php if($children){ ?>
    <ul class="leftmenu">
    <?php echo $children; ?>
    </ul>
    <?php }  }?>