# wp_save_nav_menu_items()

URL: https://chugunov.pro/api-wordpress/functions/wp_save_nav_menu_items/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 3.0.0.

## Сигнатура

```php
wp_save_nav_menu_items( int $menu_id, array[] $menu_data = array() ): int[]
```

## Описание

Сохраняет отправленные данные пункта меню навигации.

## Параметры

- `$menu_id` `int` — обязательный. Идентификатор меню, для которого сохраняется этот пункт. Значение 0 создаёт черновой, «осиротевший» пункт меню. По умолчанию 0.
- `$menu_data` `array[]` — необязательный, по умолчанию `array()`. Неочищенные данные пункта меню, отправленные методом POST.

## Возвращаемое значение

`int[]`

## Исходный код

Файл: `wp-admin/includes/nav-menu.php:1148`

```php
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 (
				// Checkbox is not checked.
				empty( $_item_object_data['menu-item-object-id'] ) &&
				(
					// And item type either isn't set.
					! isset( $_item_object_data['menu-item-type'] ) ||
					// Or URL is the default.
					in_array( $_item_object_data['menu-item-url'], array( 'https://', 'http://', '' ), true ) ||
					// Or it's not a custom menu item (but not the custom home page).
					! ( 'custom' === $_item_object_data['menu-item-type'] && ! isset( $_item_object_data['menu-item-db-id'] ) ) ||
					// Or it *is* a custom menu item that already exists.
					! 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'       => $_item_object_data['menu-item-db-id'] ?? '',
				'menu-item-object-id'   => $_item_object_data['menu-item-object-id'] ?? '',
				'menu-item-object'      => $_item_object_data['menu-item-object'] ?? '',
				'menu-item-parent-id'   => $_item_object_data['menu-item-parent-id'] ?? '',
				'menu-item-position'    => $_item_object_data['menu-item-position'] ?? '',
				'menu-item-type'        => $_item_object_data['menu-item-type'] ?? '',
				'menu-item-title'       => $_item_object_data['menu-item-title'] ?? '',
				'menu-item-url'         => $_item_object_data['menu-item-url'] ?? '',
				'menu-item-description' => $_item_object_data['menu-item-description'] ?? '',
				'menu-item-attr-title'  => $_item_object_data['menu-item-attr-title'] ?? '',
				'menu-item-target'      => $_item_object_data['menu-item-target'] ?? '',
				'menu-item-classes'     => $_item_object_data['menu-item-classes'] ?? '',
				'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;
}
```

## История изменений

- 3.0.0 — Introduced.

## Связанные

Использует: [`wp_update_nav_menu_item`](https://chugunov.pro/api-wordpress/functions/wp_update_nav_menu_item/), [`is_nav_menu`](https://chugunov.pro/api-wordpress/functions/is_nav_menu/).
Используется в: [`wp_ajax_add_menu_item`](https://chugunov.pro/api-wordpress/functions/wp_ajax_add_menu_item/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/wp_save_nav_menu_items/
