函数文档

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.

Return

WP_Term|false Menu object on success, false if $menu param isn’t supplied or term does not exist.

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.

User Contributed Notes

  1. Skip to note 2 content

    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 );