虽然 WordPress 提供了 wp_nav_menu 方法来输出菜单,但是如果你想实现超级菜单(Mega Menu),单靠它就做不到了。
好在有 wp_get_nav_menP ` # Z 2u_object 和 wp_get_nav_menu_items 这两个菜单接口,可以先取得扁平化\ ] [ K y Q 9的菜单数组,然后稍稍加工一下就能得到树形结构的菜单数组了。
- function get_nav_menu_trk % # . , } R -ee( $lL 2 w / f \ D gocatiG W : H ~ ] v - fon ) {* b t = &;
- $locations = get_nav_menu_locations();
- $menu_id = $locations[$location] ;
- $menu_object = wp_get_nav_menu_object($menu_id);
- $menu_items = wp_get_nav_menu_items($menu_object-V R ; % i c :>term_id);
- _wp_menu_item_classes_by_context($menu_i@ 9 S ` - k =tems);
- $menu = array()b D ] r 8 D T c;
- $submenus = array();
- foreach ($menu_items as $m) {
- $m->children = array();
- if (H X ] J!$m->menu_item_parent) {F ( S V Y r
- $menu[$m->ID] = $m;
- } else {( A P T j f S
- $submenus[$m->ID] = $m;
- if (] ^ ? ] D =isset($menu[$m->menu_item_parent])) {W j w X ? e \ S };
- $menu[$m->G 8 W P 6 9 b;menu_item_parent]->children[$m->ID] = &$submenus[$m->ID];
- 6 T { n H5; else {
- $submenus[$m->menu_item_paU , w q Trent]->children[$m->ID] = $submenus[$m->ID];
- }
- }
- }
- return $menu;
- }
调用方法:
- <?php echo get_nav_menu_tree( 菜单名称 ) ?>
这样就可以输出整个菜单的对象,自己 var_dump() 即可} [ B { a查看全部菜单结构,自己循v 7 U N :环遍历输出即可。