自定义层次结构WordPress菜单 - 仅显示子页面或当前活动页面

时间:2017-04-04 04:28:45

标签: wordpress menu children

我正在尝试为复杂的WordPress菜单创建自定义代码。 让我们假设我有这样的菜单wordpress菜单结构--Granchild是最后一个节点,没有更多子节点:

Parent1
 -Child1
  --Grandchild11
  --Grandchild12
 -Child2
  --Grandchild21
  --Grandchild22
Parent2

我的任务是创建这样的东西: 当用户在主页上时,只有Parent1和Parent2显示为菜单列表项。 当用户点击前。到Parent1并进入该页面,他可以看到这样的菜单结构(静态,列表项内联) - 仅点击页面的子页面,但也只能看到第一级项目:

|---------Parent1---------|--------Parent2-----------|
   |---Child1---||---Child2---|-----ChildN----|

然后让我们假设用户在新创建的功能区中单击Child1。 当该页面加载用户必须看到下一个结构时:

 |---------Parent1---------|--------Parent2-----------|
       |---Child1---||---Child2---|-----ChildN----|
           |---Grandchild11---||---Grandchild12---|

现在,用户可以从列表中单击任何Grandchild元素,并且在该页面上加载没有自己子节点的页面时,需要显示与上图相同的菜单结构。

我尝试通过此代码实现它(短信代码语句在菜单后面的标题中):

function wpb_list_child_pages() { 
global $post; 
if ( is_page() && $post->post_parent )    
    {$childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0&depth=1' );}
else
    $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0&depth=1' );
if ( $childpages ) {
    $string = '<ul class="menidva"><center>' . $childpages . '</center></ul><br>';
}

return $string;
}

但它没有按要求运作。 我保留了wordpress菜单,每个人都可以在下拉样式中看到真实的结构。

以下是要测试的网站的链接:LINK

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

对不起,我想明确一点,因为这不是一个直截了当的解决方案。我不得不稍微破坏你的代码所以我可以在本地测试它,我可能无法完全达到你想要的但是下面的答案可以帮助你解决你的问题,因为我相信其他if语句或多或少是你需要的

<?php

function wpb_list_child_pages() { 
global $post;

$ancestors = get_post_ancestors($post->ID);
$root_parent_page = end($ancestors);
    echo $root_parent_page;

if(is_page() && (count($ancestors) >= 2)){
    echo 'YOU ARE ON A GRAND CHILD PAGE';
    echo '<ul>';
       wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $root_parent_page . '&echo=1&depth=1' );
    echo '</ul>';
    echo '<ul>';
       wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=1&depth=1' );
    echo '</ul>';
}   
elseif ( is_page() && $post->post_parent ){
    echo 'YOU ARE ON A CHILD PAGE';
    echo '<ul>';
       wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=1&depth=1' );
    echo '</ul>';
}
else{
    echo 'YOU ARE ON A PARENT PAGE';
    echo '<ul class="menidva">';
       wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=1&depth=1' );
    echo '</ul>';
}


}   

wpb_list_child_pages();

?>