如何在Wordpress中获得二级菜单?

时间:2012-12-21 18:24:50

标签: wordpress menu content-management-system

我超过2个小时尝试了很多功能(wp_list_pages,get_pages,wp_nav_menu)和几个功能,但无法解决这个问题。

我创建了三层深度的页面:

PAGE level1
    SUBPAGE level2
        SUBPAGE level3 

我需要为每个菜单显示一个单独的菜单,如:

MENU1 (all top-level pages)
MENU2 (all sub-pages of CURRENT top level page)
MENU3 (all sub pages of current item from MENU2)

对于像Wordpress这样的CMS来说应该不会那么复杂,但我认为我的解决方案过于复杂。 你对可能的方法有什么建议吗?

感谢。

2 个答案:

答案 0 :(得分:2)

首先,您必须定义菜单项和页面之间的一致性。我不能从你的问题中定义这个依据。如果您有两个level2子页面和两个menu2项目怎么办?哪个菜单项属于哪个子页面?

然后这个过程是微不足道的。您可以获取所有菜单项

$menu_items = wp_get_nav_menu_items($cur_menu, array());

并检查menu_item_parent字段以查找已找到的父项

foreach ($menu_items as $item) {
    if ($item->menu_item_parent === $parent_id) {
        //this is child of $parent_id
    }
}

答案 1 :(得分:1)

如果您使用的是WordPress函数register_nav_menus(),那应该相当简单。

在你的functions.php文件中,你需要注册3个单独的菜单,如下所示:

<?php
add_action( 'init', 'register_my_menus' );
function register_my_menus() {
  register_nav_menus(
    array( 'first' => 'first', 'second' => 'second', 'third' => 'third', )
    );
  }
?>

现在已经注册了菜单,您只需要将它们放在主题文件中的位置,如下所示:

第一个菜单(可能在header.php文件中)

<div id="menu">
  <?php wp_nav_menu( array( 'theme_location' => 'first' ) ); ?>
</div>

第二个菜单(可能在sidebar.php文件中)

<div id="menu">
  <?php wp_nav_menu( array( 'theme_location' => 'second' ) ); ?>
</div>

第三个菜单(可能在footer.php文件中)

<div id="menu">
  <?php wp_nav_menu( array( 'theme_location' => 'third' ) ); ?>
</div>

最后一步是转到外观&gt;菜单并创建3菜单,命名它们,然后从管理菜单设置中选择将与它们一起使用的页面。