wp_nav_menu_update_menu_items() – Saves nav menu items

You appear to be a bot. Output may be restricted

Description

Saves nav menu items

Usage

$array = wp_nav_menu_update_menu_items( $nav_menu_selected_id, $nav_menu_selected_title );

Parameters

$nav_menu_selected_id
( int|string ) required – ID, slug, or name of the currently-selected menu.
$nav_menu_selected_title
( string ) required – Title of the currently-selected menu.

Returns

array The menu updated message

Source

File name: wordpress/wp-admin/includes/nav-menu.php
Lines:

1 to 100 of 109
function wp_nav_menu_update_menu_items( $nav_menu_selected_id, $nav_menu_selected_title ) {
  $unsorted_menu_items = wp_get_nav_menu_items(
    $nav_menu_selected_id,
    array(
      'orderby'     => 'ID',
      'output'      => ARRAY_A,
      'output_key'  => 'ID',
      'post_status' => 'draft,publish',
    )
  );

  $messages   = array();
  $menu_items = array();

  // Index menu items by DB ID.
  foreach ( $unsorted_menu_items as $_item ) {
    $menu_items[ $_item->db_id ] = $_item;
  }

  $post_fields = array(
    'menu-item-db-id',
    'menu-item-object-id',
    'menu-item-object',
    'menu-item-parent-id',
    'menu-item-position',
    'menu-item-type',
    'menu-item-title',
    'menu-item-url',
    'menu-item-description',
    'menu-item-attr-title',
    'menu-item-target',
    'menu-item-classes',
    'menu-item-xfn',
  );

  wp_defer_term_counting( true );

  // Loop through all the menu items' POST variables.
  if ( ! empty( $_POST['menu-item-db-id'] ) ) {
    foreach ( (array) $_POST['menu-item-db-id'] as $_key => $k ) {

      // Menu item title can't be blank.
      if ( ! isset( $_POST['menu-item-title'][ $_key ] ) || '' === $_POST['menu-item-title'][ $_key ] ) {
        continue;
      }

      $args = array();
      foreach ( $post_fields as $field ) {
        $args[ $field ] = isset( $_POST[ $field ][ $_key ] ) ? $_POST[ $field ][ $_key ] : '';
      }

      $menu_item_db_id = wp_update_nav_menu_item( $nav_menu_selected_id, ( $_POST['menu-item-db-id'][ $_key ] != $_key ? 0 : $_key ), $args );

      if ( is_wp_error( $menu_item_db_id ) ) {
        $messages[] = '<div id="message" class="error"><p>' . $menu_item_db_id->get_error_message() . '</p></div>';
      } else {
        unset( $menu_items[ $menu_item_db_id ] );
      }
    }
  }

  // Remove menu items from the menu that weren't in $_POST.
  if ( ! empty( $menu_items ) ) {
    foreach ( array_keys( $menu_items ) as $menu_item_id ) {
      if ( is_nav_menu_item( $menu_item_id ) ) {
        wp_delete_post( $menu_item_id );
      }
    }
  }

  // Store 'auto-add' pages.
  $auto_add        = ! empty( $_POST['auto-add-pages'] );
  $nav_menu_option = (array) get_option( 'nav_menu_options' );

  if ( ! isset( $nav_menu_option['auto_add'] ) ) {
    $nav_menu_option['auto_add'] = array();
  }

  if ( $auto_add ) {
    if ( ! in_array( $nav_menu_selected_id, $nav_menu_option['auto_add'], true ) ) {
      $nav_menu_option['auto_add'][] = $nav_menu_selected_id;
    }
  } else {
    $key = array_search( $nav_menu_selected_id, $nav_menu_option['auto_add'], true );
    if ( false !== $key ) {
      unset( $nav_menu_option['auto_add'][ $key ] );
    }
  }

  // Remove non-existent/deleted menus.
  $nav_menu_option['auto_add'] = array_intersect( $nav_menu_option['auto_add'], wp_get_nav_menus( array( 'fields' => 'ids' ) ) );
  update_option( 'nav_menu_options', $nav_menu_option );

  wp_defer_term_counting( false );

  
/** This action is documented in wp-includes/nav-menu.php */
  do_action( 'wp_update_nav_menu', $nav_menu_selected_id );

  $messages[] = '<div id="message" class="updated notice is-dismissible"><p>' .
    sprintf(
 

 View on GitHub View on Trac