wp_get_nav_menu_object()
云策文档标注
概述
wp_get_nav_menu_object() 函数用于根据菜单 ID、slug、名称或对象返回一个导航菜单对象。它通过多种方式尝试获取菜单对象,并在失败时返回 false。
关键要点
- 参数 $menu 可以是整数、字符串或 WP_Term 对象,表示菜单的 ID、slug、名称或对象本身。
- 返回值是 WP_Term 对象(成功时)或 false(参数未提供或菜单不存在时)。
- 函数内部使用 get_term() 和 get_term_by() 来查找菜单,并支持通过 'wp_get_nav_menu_object' 过滤器进行自定义。
代码示例
// 通过名称获取菜单对象
$menu = wp_get_nav_menu_object( 'wpdocs mainmenu' );
// 通过 slug 获取菜单对象
$menu = wp_get_nav_menu_object( 'wpdocs-mainmenu' );
// 通过 ID 获取菜单对象
$menu_name = 'wpdocs mainmenu';
$menu_obj = get_term_by( 'name', $menu_name, 'nav_menu' );
$menu_id = $menu_obj->term_id;
$menu = wp_get_nav_menu_object( $menu_id );
// 通过菜单位置获取菜单对象
$menu_name = 'primary';
$locations = get_nav_menu_locations();
$menu_id = $locations[ $menu_name ] ;
wp_get_nav_menu_object( $menu_id );
原文内容
Returns a navigation menu object.
Parameters
$menuint|string|WP_Termrequired-
Menu ID, slug, name, or object.
Source
function wp_get_nav_menu_object( $menu ) {
$menu_obj = false;
if ( is_object( $menu ) ) {
$menu_obj = $menu;
}
if ( $menu && ! $menu_obj ) {
$menu_obj = get_term( $menu, 'nav_menu' );
if ( ! $menu_obj ) {
$menu_obj = get_term_by( 'slug', $menu, 'nav_menu' );
}
if ( ! $menu_obj ) {
$menu_obj = get_term_by( 'name', $menu, 'nav_menu' );
}
}
if ( ! $menu_obj || is_wp_error( $menu_obj ) ) {
$menu_obj = false;
}
/**
* Filters the nav_menu term retrieved for wp_get_nav_menu_object().
*
* @since 4.3.0
*
* @param WP_Term|false $menu_obj Term from nav_menu taxonomy, or false if nothing had been found.
* @param int|string|WP_Term $menu The menu ID, slug, name, or object passed to wp_get_nav_menu_object().
*/
return apply_filters( 'wp_get_nav_menu_object', $menu_obj, $menu );
}
Hooks
- apply_filters( ‘wp_get_nav_menu_object’, WP_Term|false $menu_obj, int|string|WP_Term $menu )
-
Filters the nav_menu term retrieved for wp_get_nav_menu_object() .
Changelog
| Version | Description |
|---|---|
| 3.0.0 | Introduced. |
Skip to note 2 content
Codex
Examples
// By name. $menu = wp_get_nav_menu_object( 'wpdocs mainmenu' ); // By slug. $menu = wp_get_nav_menu_object( 'wpdocs-mainmenu' ); // By ID. $menu_name = 'wpdocs mainmenu'; $menu_obj = get_term_by( 'name', $menu_name, 'nav_menu' ); $menu_id = $menu_obj->term_id; $menu = wp_get_nav_menu_object( $menu_id ); // By location. $menu_name = 'primary'; $locations = get_nav_menu_locations(); $menu_id = $locations[ $menu_name ] ; wp_get_nav_menu_object( $menu_id );