获取 WordPress 菜单的树形结构数组(对象)

WordPress的wp_nav_menu无法直接实现超级菜单,但可通过wp_get_nav_menu_items获取扁平化菜单数据,再加工为树形结构。示例代码展示了如何利用菜单项父子关系构建层级菜单,通过遍历处理子菜单项,最终返回完整的树形菜单数组。

WordPress基础教程
阅读时间: 14 分钟
最后更新时间:2025年11月13日

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

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

function c7sky_get_nav_menu_tree( $location ) {
	$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->term_id);

	_wp_menu_item_classes_by_context($menu_items);

	$menu = array();
	$submenus = array();

	foreach ($menu_items as $m) {
		$m->children = array();

		if (!$m->menu_item_parent) {
			$menu[$m->ID] = $m;
		} else {
			$submenus[$m->ID] = $m;

			if (isset($menu[$m->menu_item_parent])) {
				$menu[$m->menu_item_parent]->children[$m->ID] = &$submenus[$m->ID];
			} else {
				$submenus[$m->menu_item_parent]->children[$m->ID] = $submenus[$m->ID];
			}
		}
	}

	return $menu;
}

 

这篇文章有用吗?

点击星号为它评分!

平均评分 1 / 5. 投票数: 1

到目前为止还没有投票!成为第一位评论此文章。

曾凤祥

曾凤祥

技术负责人
小兽wordpress凭借多年的wordpress企业主题制作经验,坚持以“为用户而生的wordpress主题”为宗旨,累计为10万多家客户提供品质wordpress建站服务,得到了客户的一致好评。我们一直用心对待每一个客户,我们坚信:“善待客户,将会成为终身客户”。小兽wordpress能坚持多年,是因为我们一直诚信。

相关文章

如何让线上业务更上一层楼

还没有WordPress网站

还没有WordPress网站

不管你从事什么行业,WordPress都会为你提供一个专业的主题模板。在WordPress市场上有成千上万的免费主题,适合很多中小企业。

查看所有模板
已经有WordPress网站

已经有WordPress网站

小兽WordPress诚邀你一起学习WordPress,愿与各方携手升级改善您的WordPress网站,一起交流网站加速,网站优化等问题。

马上交个朋友
微信联系
chat 扫码联系
模板建站
挑选模板
网站定制
免费诊断
咨询热线
咨询热线

189-0733-7671

返回顶部