wp_update_nav_menu_object
Save the properties of a menu or create a new menu with those properties.
Description
Note that $menu_data
is expected to be pre-slashed.
Returns (int|WP_Error)
Menu ID on success, WP_Error object on failure.
Parameters (2)
- 0. $menu_id — Optional. (int)
- The ID of the menu or 0 to create a new menu.
- 1. $menu_data — Optional. (array) =>
array()
- The array of menu data.
Usage
if ( !function_exists( 'wp_update_nav_menu_object' ) ) { require_once ABSPATH . WPINC . '/nav-menu.php'; } // The ID of the menu or "0" to create a new menu. $menu_id = -1; // The array of menu data. $menu_data = array(); // NOTICE! Understand what this does before running. $result = wp_update_nav_menu_object($menu_id, $menu_data);
Defined (1)
The function is defined in the following location(s).
- /wp-includes/nav-menu.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;
- }