获取 WordPress 菜单树形结构数组自定义万能菜单

虽然 WordPress 提供了 wp_nav_menu 方法来输出菜单,但是如果你想实现超级菜单(Mega …

虽然 WordPress 提供了 wp_nav_menu 方法来输出菜单,但是如果你想实现超级菜单(Mega Menu),单靠它就做不到了。

好在有 wp_get_nav_menu_object 和 wp_get_nav_menu_items 这两个菜单接口,可以先取得扁平化的菜单数组,然后稍稍加工一下就能得到树形结构的菜单数组了。

  1. function get_nav_menu_tree( $location ) {
  2. 	$locations = get_nav_menu_locations();
  3. 	$menu_id = $locations[$location] ;
  4. 	$menu_object = wp_get_nav_menu_object($menu_id);
  5. 	$menu_items = wp_get_nav_menu_items($menu_object->term_id);
  6.  
  7. 	_wp_menu_item_classes_by_context($menu_items);
  8.  
  9. 	$menu = array();
  10. 	$submenus = array();
  11.  
  12. 	foreach ($menu_items as $m) {
  13. 		$m->children = array();
  14.  
  15. 		if (!$m->menu_item_parent) {
  16. 			$menu[$m->ID] = $m;
  17. 		} else {
  18. 			$submenus[$m->ID] = $m;
  19.  
  20. 			if (isset($menu[$m->menu_item_parent])) {
  21. 				$menu[$m->menu_item_parent]->children[$m->ID] = &$submenus[$m->ID];
  22. 			} else {
  23. 				$submenus[$m->menu_item_parent]->children[$m->ID] = $submenus[$m->ID];
  24. 			}
  25. 		}
  26. 	}
  27.  
  28. 	return $menu;
  29. }

调用方法:

  1. <?php echo get_nav_menu_tree( 菜单名称 ) ?>

这样就可以输出整个菜单的对象,自己 var_dump() 即可查看全部菜单结构,自己循环遍历输出即可。

类别:WordPress教程

本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。

评论 (0)COMMENT

登录 账号发表你的看法,还没有账号?立即免费 注册