保存菜单的属性或使用这些属性创建新菜单。

原型

wp_update_nav_menu_object( int $menu_id, array $menu_data = array() )

描述

请注意,$ menu_data预计会被预先削减。

参数

$menu_id (int) (Required) 菜单的ID或“0”以创建新菜单。

$menu_data (array) (Optional) 菜单数据的数组。

返回值

(int|WP_Error)  菜单ID成功,

源文件

路径:wp-includes/nav-menu.php

<?php
...
function wp_update_nav_menu_object( $menu_id = 0, $menu_data = array() ) {
	// expected_slashed ($menu_data)
	$menu_id = (int) $menu_id;
	$_menu = wp_get_nav_menu_object( $menu_id );
	$args = array(
		'description' => ( isset( $menu_data['description'] ) ? $menu_data['description']  : '' ),
		'name'        => ( isset( $menu_data['menu-name']   ) ? $menu_data['menu-name']    : '' ),
		'parent'      => ( isset( $menu_data['parent']      ) ? (int) $menu_data['parent'] : 0  ),
		'slug'        => null,
	);
	// double-check that we're not going to have one menu take the name of another
	$_possible_existing = get_term_by( 'name', $menu_data['menu-name'], 'nav_menu' );
	if (
		$_possible_existing &&
		! is_wp_error( $_possible_existing ) &&
		isset( $_possible_existing->term_id ) &&
		$_possible_existing->term_id != $menu_id
	) {
		return new WP_Error( 'menu_exists',
			/* translators: %s: menu name */
			sprintf( __( 'The menu name %s conflicts with another menu name. Please try another.' ),
				'<strong>' . esc_html( $menu_data['menu-name'] ) . '</strong>'
			)
		);
	}
	// menu doesn't already exist, so create a new menu
	if ( ! $_menu || is_wp_error( $_menu ) ) {
		$menu_exists = get_term_by( 'name', $menu_data['menu-name'], 'nav_menu' );
		if ( $menu_exists ) {
			return new WP_Error( 'menu_exists',
				/* translators: %s: menu name */
				sprintf( __( 'The menu name %s conflicts with another menu name. Please try another.' ),
					'<strong>' . esc_html( $menu_data['menu-name'] ) . '</strong>'
				)
			);
		}
		$_menu = wp_insert_term( $menu_data['menu-name'], 'nav_menu', $args );
		if ( is_wp_error( $_menu ) )
			return $_menu;
		/**
		 * Fires after a navigation menu is successfully created.
		 *
		 * @since 3.0.0
		 *
		 * @param int   $term_id   ID of the new menu.
		 * @param array $menu_data An array of menu data.
		 */
		do_action( 'wp_create_nav_menu', $_menu['term_id'], $menu_data );
		return (int) $_menu['term_id'];
	}
	if ( ! $_menu || ! isset( $_menu->term_id ) )
		return 0;
	$menu_id = (int) $_menu->term_id;
	$update_response = wp_update_term( $menu_id, 'nav_menu', $args );
	if ( is_wp_error( $update_response ) )
		return $update_response;
	$menu_id = (int) $update_response['term_id'];
	/**
	 * Fires after a navigation menu has been successfully updated.
	 *
	 * @since 3.0.0
	 *
	 * @param int   $menu_id   ID of the updated menu.
	 * @param array $menu_data An array of menu data.
	 */
	do_action( 'wp_update_nav_menu', $menu_id, $menu_data );
	return $menu_id;
}
...
?>

其他

英文文档:https://developer.wordpress.org/reference/functions/wp_update_nav_menu_object/