我可以使用以下脚本来构建包含许多其他菜单项的主菜单吗?
示例:我的主菜单看起来像这样 -
-1
--1.1
--1.2
-2
我还有很多其他ID =(1.1,1.2,......)的菜单,所以在网页上构建菜单时,它应该结合所有匹配的菜单。结果应该是这样的:
-1
--1.1
---items from menu id 1.1
--1.2
---items from menu id 1.2
-2
and so on.
这是我的代码 -
// Get the nav menu based on $menu_name (same as 'theme_location' or 'menu' arg to wp_nav_menu)
// This code based on wp_nav_menu's code to get Menu ID from menu slug
$menu_name = 'custom_menu_slug';
if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {
$menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
$menu_items = wp_get_nav_menu_items($menu->term_id);
$menu_list = '<ul id="menu-' . $menu_name . '">';
foreach ( (array) $menu_items as $key => $menu_item ) {
$title = $menu_item->title;
$url = $menu_item->url;
$menu_list .= '<li><a href="' . $url . '">' . $title . '</a></li>';
}
$menu_list .= '</ul>';
} else {
$menu_list = '<ul><li>Menu "' . $menu_name . '" not defined.</li></ul>';
}
// $menu_list now ready to output
source - http://codex.wordpress.org/Function_Reference/wp_get_nav_menu_items
我的目标是将大型菜单拆分为较小的菜单,然后在我的网页上构建它们。
答案 0 :(得分:0)
从第一眼看来,这似乎是一项艰巨的工作,但实际上即使我有小技巧的php也可以解决这个问题,只需将以下代码添加到我的自定义walker类中:
if ( $depth == 1 ) { // remove this statement if depth check is not required
if (wp_get_nav_menu_object($item->title)) {// checking if item name matches to menu name
$item_output .= wp_nav_menu( array('menu' => $item->title, 'container_class' => 'mgmenu_tabs_panels', 'menu_class' => '', 'menu_id' => 'section'. $item->ID, 'echo' => 0 ));
}
}
就这么简单。此脚本将检查是否有任何创建的菜单名称与子菜单项名称匹配,当它们匹配脚本时,将添加该匹配菜单中的所有项目。
基本上,此脚本允许您将任何大型菜单划分为许多较小的菜单。