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()
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.
Skip to note 2 content
capbussat
After some work, I have summarized differences between some menu functions:
var_dump( wp_get_nav_menus()); // returns all navigation objects<br />// returns allocated menus to themevar_dump( get_registered_nav_menus()); // returns registered menus<br />
var_dump( get_nav_menu_locations());
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’