wp_update_nav_menu_object

Definition:
function wp_update_nav_menu_object( $menu_id = 0, $menu_data = array() {}

Save the properties of a menu or create a new menu with those properties.

Parameters

  • int $menu_id: The ID of the menu or “0” to create a new menu.
  • array $menu_data: The array of menu data.

Return values

returns:object The menu’s ID or WP_Error object.

Defined actions

  • wp_create_nav_menu
    do_action( 'wp_create_nav_menu', $_menu['term_id'], $menu_data );
  • wp_update_nav_menu
    do_action( 'wp_update_nav_menu', $menu_id, $menu_data );

Source code

function wp_update_nav_menu_object( $menu_id = 0, $menu_data = array() ) {

	$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', sprintf( __('The menu name <strong>%s</strong> conflicts with another menu name. Please try another.'), esc_html( $menu_data['menu-name'] ) ) );



	// 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', sprintf( __('The menu name <strong>%s</strong> conflicts with another menu name. Please try another.'), esc_html( $menu_data['menu-name'] ) ) );



		$_menu = wp_insert_term( $menu_data['menu-name'], 'nav_menu', $args );



		if ( is_wp_error( $_menu ) )

			return $_menu;



		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;



	do_action( 'wp_update_nav_menu', $menu_id, $menu_data );

	return $menu_id;

}

4227

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: