wp_save_nav_menu_items

The timeline below displays how wordpress function wp_save_nav_menu_items has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.3

/**
 * Save posted nav menu item data.
 *
 * @since 3.0.0
 *
 * @param int     $menu_id   The menu ID for which to save this item. Value of 0 makes a draft, orphaned menu item. Default 0.
 * @param array[] $menu_data The unsanitized POSTed menu item data.
 * @return int[] The database IDs of the items saved
 */
function wp_save_nav_menu_items($menu_id = 0, $menu_data = array())
{
    $menu_id = (int) $menu_id;
    $items_saved = array();
    if (0 === $menu_id || is_nav_menu($menu_id)) {
        // Loop through all the menu items' POST values.
        foreach ((array) $menu_data as $_possible_db_id => $_item_object_data) {
            if (empty($_item_object_data['menu-item-object-id']) && (!isset($_item_object_data['menu-item-type']) || in_array($_item_object_data['menu-item-url'], array('https://', 'http://', ''), true) || !('custom' === $_item_object_data['menu-item-type'] && !isset($_item_object_data['menu-item-db-id'])) || !empty($_item_object_data['menu-item-db-id']))) {
                // Then this potential menu item is not getting added to this menu.
                continue;
            }
            // If this possible menu item doesn't actually have a menu database ID yet.
            if (empty($_item_object_data['menu-item-db-id']) || 0 > $_possible_db_id || $_possible_db_id !== (int) $_item_object_data['menu-item-db-id']) {
                $_actual_db_id = 0;
            } else {
                $_actual_db_id = (int) $_item_object_data['menu-item-db-id'];
            }
            $args = array('menu-item-db-id' => isset($_item_object_data['menu-item-db-id']) ? $_item_object_data['menu-item-db-id'] : '', 'menu-item-object-id' => isset($_item_object_data['menu-item-object-id']) ? $_item_object_data['menu-item-object-id'] : '', 'menu-item-object' => isset($_item_object_data['menu-item-object']) ? $_item_object_data['menu-item-object'] : '', 'menu-item-parent-id' => isset($_item_object_data['menu-item-parent-id']) ? $_item_object_data['menu-item-parent-id'] : '', 'menu-item-position' => isset($_item_object_data['menu-item-position']) ? $_item_object_data['menu-item-position'] : '', 'menu-item-type' => isset($_item_object_data['menu-item-type']) ? $_item_object_data['menu-item-type'] : '', 'menu-item-title' => isset($_item_object_data['menu-item-title']) ? $_item_object_data['menu-item-title'] : '', 'menu-item-url' => isset($_item_object_data['menu-item-url']) ? $_item_object_data['menu-item-url'] : '', 'menu-item-description' => isset($_item_object_data['menu-item-description']) ? $_item_object_data['menu-item-description'] : '', 'menu-item-attr-title' => isset($_item_object_data['menu-item-attr-title']) ? $_item_object_data['menu-item-attr-title'] : '', 'menu-item-target' => isset($_item_object_data['menu-item-target']) ? $_item_object_data['menu-item-target'] : '', 'menu-item-classes' => isset($_item_object_data['menu-item-classes']) ? $_item_object_data['menu-item-classes'] : '', 'menu-item-xfn' => isset($_item_object_data['menu-item-xfn']) ? $_item_object_data['menu-item-xfn'] : '');
            $items_saved[] = wp_update_nav_menu_item($menu_id, $_actual_db_id, $args);
        }
    }
    return $items_saved;
}

WordPress Version: 5.5

/**
 * Save posted nav menu item data.
 *
 * @since 3.0.0
 *
 * @param int     $menu_id   The menu ID for which to save this item. Value of 0 makes a draft, orphaned menu item. Default 0.
 * @param array[] $menu_data The unsanitized POSTed menu item data.
 * @return int[] The database IDs of the items saved
 */
function wp_save_nav_menu_items($menu_id = 0, $menu_data = array())
{
    $menu_id = (int) $menu_id;
    $items_saved = array();
    if (0 == $menu_id || is_nav_menu($menu_id)) {
        // Loop through all the menu items' POST values.
        foreach ((array) $menu_data as $_possible_db_id => $_item_object_data) {
            if (empty($_item_object_data['menu-item-object-id']) && (!isset($_item_object_data['menu-item-type']) || in_array($_item_object_data['menu-item-url'], array('https://', 'http://', ''), true) || !('custom' === $_item_object_data['menu-item-type'] && !isset($_item_object_data['menu-item-db-id'])) || !empty($_item_object_data['menu-item-db-id']))) {
                // Then this potential menu item is not getting added to this menu.
                continue;
            }
            // If this possible menu item doesn't actually have a menu database ID yet.
            if (empty($_item_object_data['menu-item-db-id']) || 0 > $_possible_db_id || $_possible_db_id != $_item_object_data['menu-item-db-id']) {
                $_actual_db_id = 0;
            } else {
                $_actual_db_id = (int) $_item_object_data['menu-item-db-id'];
            }
            $args = array('menu-item-db-id' => isset($_item_object_data['menu-item-db-id']) ? $_item_object_data['menu-item-db-id'] : '', 'menu-item-object-id' => isset($_item_object_data['menu-item-object-id']) ? $_item_object_data['menu-item-object-id'] : '', 'menu-item-object' => isset($_item_object_data['menu-item-object']) ? $_item_object_data['menu-item-object'] : '', 'menu-item-parent-id' => isset($_item_object_data['menu-item-parent-id']) ? $_item_object_data['menu-item-parent-id'] : '', 'menu-item-position' => isset($_item_object_data['menu-item-position']) ? $_item_object_data['menu-item-position'] : '', 'menu-item-type' => isset($_item_object_data['menu-item-type']) ? $_item_object_data['menu-item-type'] : '', 'menu-item-title' => isset($_item_object_data['menu-item-title']) ? $_item_object_data['menu-item-title'] : '', 'menu-item-url' => isset($_item_object_data['menu-item-url']) ? $_item_object_data['menu-item-url'] : '', 'menu-item-description' => isset($_item_object_data['menu-item-description']) ? $_item_object_data['menu-item-description'] : '', 'menu-item-attr-title' => isset($_item_object_data['menu-item-attr-title']) ? $_item_object_data['menu-item-attr-title'] : '', 'menu-item-target' => isset($_item_object_data['menu-item-target']) ? $_item_object_data['menu-item-target'] : '', 'menu-item-classes' => isset($_item_object_data['menu-item-classes']) ? $_item_object_data['menu-item-classes'] : '', 'menu-item-xfn' => isset($_item_object_data['menu-item-xfn']) ? $_item_object_data['menu-item-xfn'] : '');
            $items_saved[] = wp_update_nav_menu_item($menu_id, $_actual_db_id, $args);
        }
    }
    return $items_saved;
}

WordPress Version: 5.3

/**
 * Save posted nav menu item data.
 *
 * @since 3.0.0
 *
 * @param int     $menu_id   The menu ID for which to save this item. Value of 0 makes a draft, orphaned menu item. Default 0.
 * @param array[] $menu_data The unsanitized POSTed menu item data.
 * @return int[] The database IDs of the items saved
 */
function wp_save_nav_menu_items($menu_id = 0, $menu_data = array())
{
    $menu_id = (int) $menu_id;
    $items_saved = array();
    if (0 == $menu_id || is_nav_menu($menu_id)) {
        // Loop through all the menu items' POST values.
        foreach ((array) $menu_data as $_possible_db_id => $_item_object_data) {
            if (empty($_item_object_data['menu-item-object-id']) && (!isset($_item_object_data['menu-item-type']) || in_array($_item_object_data['menu-item-url'], array('https://', 'http://', '')) || !('custom' == $_item_object_data['menu-item-type'] && !isset($_item_object_data['menu-item-db-id'])) || !empty($_item_object_data['menu-item-db-id']))) {
                // Then this potential menu item is not getting added to this menu.
                continue;
            }
            // If this possible menu item doesn't actually have a menu database ID yet.
            if (empty($_item_object_data['menu-item-db-id']) || 0 > $_possible_db_id || $_possible_db_id != $_item_object_data['menu-item-db-id']) {
                $_actual_db_id = 0;
            } else {
                $_actual_db_id = (int) $_item_object_data['menu-item-db-id'];
            }
            $args = array('menu-item-db-id' => isset($_item_object_data['menu-item-db-id']) ? $_item_object_data['menu-item-db-id'] : '', 'menu-item-object-id' => isset($_item_object_data['menu-item-object-id']) ? $_item_object_data['menu-item-object-id'] : '', 'menu-item-object' => isset($_item_object_data['menu-item-object']) ? $_item_object_data['menu-item-object'] : '', 'menu-item-parent-id' => isset($_item_object_data['menu-item-parent-id']) ? $_item_object_data['menu-item-parent-id'] : '', 'menu-item-position' => isset($_item_object_data['menu-item-position']) ? $_item_object_data['menu-item-position'] : '', 'menu-item-type' => isset($_item_object_data['menu-item-type']) ? $_item_object_data['menu-item-type'] : '', 'menu-item-title' => isset($_item_object_data['menu-item-title']) ? $_item_object_data['menu-item-title'] : '', 'menu-item-url' => isset($_item_object_data['menu-item-url']) ? $_item_object_data['menu-item-url'] : '', 'menu-item-description' => isset($_item_object_data['menu-item-description']) ? $_item_object_data['menu-item-description'] : '', 'menu-item-attr-title' => isset($_item_object_data['menu-item-attr-title']) ? $_item_object_data['menu-item-attr-title'] : '', 'menu-item-target' => isset($_item_object_data['menu-item-target']) ? $_item_object_data['menu-item-target'] : '', 'menu-item-classes' => isset($_item_object_data['menu-item-classes']) ? $_item_object_data['menu-item-classes'] : '', 'menu-item-xfn' => isset($_item_object_data['menu-item-xfn']) ? $_item_object_data['menu-item-xfn'] : '');
            $items_saved[] = wp_update_nav_menu_item($menu_id, $_actual_db_id, $args);
        }
    }
    return $items_saved;
}

WordPress Version: 5.1

/**
 * Save posted nav menu item data.
 *
 * @since 3.0.0
 *
 * @param int     $menu_id   The menu ID for which to save this item. Value of 0 makes a draft, orphaned menu item. Default 0.
 * @param array[] $menu_data The unsanitized POSTed menu item data.
 * @return int[] The database IDs of the items saved
 */
function wp_save_nav_menu_items($menu_id = 0, $menu_data = array())
{
    $menu_id = (int) $menu_id;
    $items_saved = array();
    if (0 == $menu_id || is_nav_menu($menu_id)) {
        // Loop through all the menu items' POST values.
        foreach ((array) $menu_data as $_possible_db_id => $_item_object_data) {
            if (empty($_item_object_data['menu-item-object-id']) && (!isset($_item_object_data['menu-item-type']) || in_array($_item_object_data['menu-item-url'], array('http://', '')) || !('custom' == $_item_object_data['menu-item-type'] && !isset($_item_object_data['menu-item-db-id'])) || !empty($_item_object_data['menu-item-db-id']))) {
                // Then this potential menu item is not getting added to this menu.
                continue;
            }
            // If this possible menu item doesn't actually have a menu database ID yet.
            if (empty($_item_object_data['menu-item-db-id']) || 0 > $_possible_db_id || $_possible_db_id != $_item_object_data['menu-item-db-id']) {
                $_actual_db_id = 0;
            } else {
                $_actual_db_id = (int) $_item_object_data['menu-item-db-id'];
            }
            $args = array('menu-item-db-id' => isset($_item_object_data['menu-item-db-id']) ? $_item_object_data['menu-item-db-id'] : '', 'menu-item-object-id' => isset($_item_object_data['menu-item-object-id']) ? $_item_object_data['menu-item-object-id'] : '', 'menu-item-object' => isset($_item_object_data['menu-item-object']) ? $_item_object_data['menu-item-object'] : '', 'menu-item-parent-id' => isset($_item_object_data['menu-item-parent-id']) ? $_item_object_data['menu-item-parent-id'] : '', 'menu-item-position' => isset($_item_object_data['menu-item-position']) ? $_item_object_data['menu-item-position'] : '', 'menu-item-type' => isset($_item_object_data['menu-item-type']) ? $_item_object_data['menu-item-type'] : '', 'menu-item-title' => isset($_item_object_data['menu-item-title']) ? $_item_object_data['menu-item-title'] : '', 'menu-item-url' => isset($_item_object_data['menu-item-url']) ? $_item_object_data['menu-item-url'] : '', 'menu-item-description' => isset($_item_object_data['menu-item-description']) ? $_item_object_data['menu-item-description'] : '', 'menu-item-attr-title' => isset($_item_object_data['menu-item-attr-title']) ? $_item_object_data['menu-item-attr-title'] : '', 'menu-item-target' => isset($_item_object_data['menu-item-target']) ? $_item_object_data['menu-item-target'] : '', 'menu-item-classes' => isset($_item_object_data['menu-item-classes']) ? $_item_object_data['menu-item-classes'] : '', 'menu-item-xfn' => isset($_item_object_data['menu-item-xfn']) ? $_item_object_data['menu-item-xfn'] : '');
            $items_saved[] = wp_update_nav_menu_item($menu_id, $_actual_db_id, $args);
        }
    }
    return $items_saved;
}

WordPress Version: 4.0

/**
 * Save posted nav menu item data.
 *
 * @since 3.0.0
 *
 * @param int $menu_id The menu ID for which to save this item. $menu_id of 0 makes a draft, orphaned menu item.
 * @param array $menu_data The unsanitized posted menu item data.
 * @return array The database IDs of the items saved
 */
function wp_save_nav_menu_items($menu_id = 0, $menu_data = array())
{
    $menu_id = (int) $menu_id;
    $items_saved = array();
    if (0 == $menu_id || is_nav_menu($menu_id)) {
        // Loop through all the menu items' POST values.
        foreach ((array) $menu_data as $_possible_db_id => $_item_object_data) {
            if (empty($_item_object_data['menu-item-object-id']) && (!isset($_item_object_data['menu-item-type']) || in_array($_item_object_data['menu-item-url'], array('http://', '')) || !('custom' == $_item_object_data['menu-item-type'] && !isset($_item_object_data['menu-item-db-id'])) || !empty($_item_object_data['menu-item-db-id']))) {
                // Then this potential menu item is not getting added to this menu.
                continue;
            }
            // If this possible menu item doesn't actually have a menu database ID yet.
            if (empty($_item_object_data['menu-item-db-id']) || 0 > $_possible_db_id || $_possible_db_id != $_item_object_data['menu-item-db-id']) {
                $_actual_db_id = 0;
            } else {
                $_actual_db_id = (int) $_item_object_data['menu-item-db-id'];
            }
            $args = array('menu-item-db-id' => isset($_item_object_data['menu-item-db-id']) ? $_item_object_data['menu-item-db-id'] : '', 'menu-item-object-id' => isset($_item_object_data['menu-item-object-id']) ? $_item_object_data['menu-item-object-id'] : '', 'menu-item-object' => isset($_item_object_data['menu-item-object']) ? $_item_object_data['menu-item-object'] : '', 'menu-item-parent-id' => isset($_item_object_data['menu-item-parent-id']) ? $_item_object_data['menu-item-parent-id'] : '', 'menu-item-position' => isset($_item_object_data['menu-item-position']) ? $_item_object_data['menu-item-position'] : '', 'menu-item-type' => isset($_item_object_data['menu-item-type']) ? $_item_object_data['menu-item-type'] : '', 'menu-item-title' => isset($_item_object_data['menu-item-title']) ? $_item_object_data['menu-item-title'] : '', 'menu-item-url' => isset($_item_object_data['menu-item-url']) ? $_item_object_data['menu-item-url'] : '', 'menu-item-description' => isset($_item_object_data['menu-item-description']) ? $_item_object_data['menu-item-description'] : '', 'menu-item-attr-title' => isset($_item_object_data['menu-item-attr-title']) ? $_item_object_data['menu-item-attr-title'] : '', 'menu-item-target' => isset($_item_object_data['menu-item-target']) ? $_item_object_data['menu-item-target'] : '', 'menu-item-classes' => isset($_item_object_data['menu-item-classes']) ? $_item_object_data['menu-item-classes'] : '', 'menu-item-xfn' => isset($_item_object_data['menu-item-xfn']) ? $_item_object_data['menu-item-xfn'] : '');
            $items_saved[] = wp_update_nav_menu_item($menu_id, $_actual_db_id, $args);
        }
    }
    return $items_saved;
}

WordPress Version: 3.7

/**
 * Save posted nav menu item data.
 *
 * @since 3.0.0
 *
 * @param int $menu_id The menu ID for which to save this item. $menu_id of 0 makes a draft, orphaned menu item.
 * @param array $menu_data The unsanitized posted menu item data.
 * @return array The database IDs of the items saved
 */
function wp_save_nav_menu_items($menu_id = 0, $menu_data = array())
{
    $menu_id = (int) $menu_id;
    $items_saved = array();
    if (0 == $menu_id || is_nav_menu($menu_id)) {
        // Loop through all the menu items' POST values
        foreach ((array) $menu_data as $_possible_db_id => $_item_object_data) {
            if (empty($_item_object_data['menu-item-object-id']) && (!isset($_item_object_data['menu-item-type']) || in_array($_item_object_data['menu-item-url'], array('http://', '')) || !('custom' == $_item_object_data['menu-item-type'] && !isset($_item_object_data['menu-item-db-id'])) || !empty($_item_object_data['menu-item-db-id']))) {
                continue;
                // then this potential menu item is not getting added to this menu
            }
            // if this possible menu item doesn't actually have a menu database ID yet
            if (empty($_item_object_data['menu-item-db-id']) || 0 > $_possible_db_id || $_possible_db_id != $_item_object_data['menu-item-db-id']) {
                $_actual_db_id = 0;
            } else {
                $_actual_db_id = (int) $_item_object_data['menu-item-db-id'];
            }
            $args = array('menu-item-db-id' => isset($_item_object_data['menu-item-db-id']) ? $_item_object_data['menu-item-db-id'] : '', 'menu-item-object-id' => isset($_item_object_data['menu-item-object-id']) ? $_item_object_data['menu-item-object-id'] : '', 'menu-item-object' => isset($_item_object_data['menu-item-object']) ? $_item_object_data['menu-item-object'] : '', 'menu-item-parent-id' => isset($_item_object_data['menu-item-parent-id']) ? $_item_object_data['menu-item-parent-id'] : '', 'menu-item-position' => isset($_item_object_data['menu-item-position']) ? $_item_object_data['menu-item-position'] : '', 'menu-item-type' => isset($_item_object_data['menu-item-type']) ? $_item_object_data['menu-item-type'] : '', 'menu-item-title' => isset($_item_object_data['menu-item-title']) ? $_item_object_data['menu-item-title'] : '', 'menu-item-url' => isset($_item_object_data['menu-item-url']) ? $_item_object_data['menu-item-url'] : '', 'menu-item-description' => isset($_item_object_data['menu-item-description']) ? $_item_object_data['menu-item-description'] : '', 'menu-item-attr-title' => isset($_item_object_data['menu-item-attr-title']) ? $_item_object_data['menu-item-attr-title'] : '', 'menu-item-target' => isset($_item_object_data['menu-item-target']) ? $_item_object_data['menu-item-target'] : '', 'menu-item-classes' => isset($_item_object_data['menu-item-classes']) ? $_item_object_data['menu-item-classes'] : '', 'menu-item-xfn' => isset($_item_object_data['menu-item-xfn']) ? $_item_object_data['menu-item-xfn'] : '');
            $items_saved[] = wp_update_nav_menu_item($menu_id, $_actual_db_id, $args);
        }
    }
    return $items_saved;
}