函数文档

wp_get_nav_menus()

💡 云策文档标注

概述

wp_get_nav_menus() 函数用于检索所有导航菜单对象,基于 get_terms() 实现,并支持参数过滤和钩子应用。

关键要点

  • 返回所有导航菜单对象的数组,类型为 WP_Term[]
  • 可选参数 $args 传递给 get_terms(),默认包含 taxonomy 为 'nav_menu'、hide_empty 为 false、orderby 为 'name'
  • 使用 wp_parse_args() 合并参数,并通过 apply_filters('wp_get_nav_menus') 钩子过滤结果
  • 与 get_registered_nav_menus() 和 get_nav_menu_locations() 等函数有区别,后者分别返回注册菜单和菜单位置分配
  • 自版本 3.0.0 引入,4.1.0 中 orderby 默认值从 'none' 改为 'name'

代码示例

var_dump( wp_get_nav_menus() ); // 返回所有导航菜单对象
var_dump( get_registered_nav_menus() ); // 返回注册的菜单
var_dump( get_nav_menu_locations() ); // 返回主题中分配的菜单位置

📄 原文内容

Returns all navigation menu objects.

Parameters

$argsarrayoptional
Array of arguments passed on to get_terms() .

More Arguments from get_terms( … $args )

Array or string of arguments. See WP_Term_Query::__construct() for information on accepted arguments.

Default:array()

Return

WP_Term[] An array of menu objects.

Source

function wp_get_nav_menus( $args = array() ) {
	$defaults = array(
		'taxonomy'   => 'nav_menu',
		'hide_empty' => false,
		'orderby'    => 'name',
	);
	$args     = wp_parse_args( $args, $defaults );

	/**
	 * Filters the navigation menu objects being returned.
	 *
	 * @since 3.0.0
	 *
	 * @see get_terms()
	 *
	 * @param WP_Term[] $menus An array of menu objects.
	 * @param array     $args  An array of arguments used to retrieve menu objects.
	 */
	return apply_filters( 'wp_get_nav_menus', get_terms( $args ), $args );
}

Hooks

apply_filters( ‘wp_get_nav_menus’, WP_Term[] $menus, array $args )

Filters the navigation menu objects being returned.

Changelog

Version Description
4.1.0 Default value of the 'orderby' argument was changed from 'none' to 'name'.
3.0.0 Introduced.

User Contributed Notes

  1. Skip to note 2 content

    After some work, I have summarized differences between some menu functions:
    var_dump( wp_get_nav_menus()); // returns all navigation objects<br />
    var_dump( get_registered_nav_menus()); // returns registered menus<br />
    var_dump( get_nav_menu_locations());
    // returns allocated menus to theme

    Menu Objects are like this:
    Menu object has: public ‘term_id’ => int 17
    Menu object has: public ‘term_id’ => int 18

    Registered menus in theme:
    array (size=2)
    ‘primary’ => string ‘Primary menu’ (length=12)
    ‘footer’ => string ‘Secondary menu’ (length=14)

    Locations point to used menus:
    array (size=2)
    ‘primary’ => int 17
    ‘footer’ => int 18

    So in this theme: only ‘primary’ and ‘footer’ exist in the theme and are used 17 for ‘primary’and 18 menu object for ‘footer’