# add_menu_page()

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

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

## Сигнатура

```php
add_menu_page( string $page_title, string $menu_title, string $capability, string $menu_slug, callable $callback = '', string $icon_url = '', int|float $position = null ): string
```

## Описание

Принимает право доступа, которое используется для определения того, включается ли страница в меню.
Функция, подключённая для вывода содержимого страницы, также должна проверять, что пользователь обладает необходимым правом доступа.

## Параметры

- `$page_title` `string` — обязательный. Текст, отображаемый в тегах заголовка страницы при выборе пункта меню.
- `$menu_title` `string` — обязательный. Текст, используемый для пункта меню.
- `$capability` `string` — обязательный. Право доступа, необходимое для отображения этого меню пользователю.
- `$menu_slug` `string` — обязательный. Слаг, по которому будет обозначаться это меню. Должен быть уникальным для этой страницы меню и содержать только строчные буквенно-цифровые символы, дефисы и подчёркивания для совместимости с sanitize_key() .
- `$callback` `callable` — необязательный, по умолчанию `''`. Функция, вызываемая для вывода содержимого этой страницы.
- `$icon_url` `string` — необязательный, по умолчанию `''`. URL значка, используемого для этого меню.
  
  Передайте SVG в кодировке base64 через data URI — он будет окрашен в соответствии с цветовой схемой. Значение должно начинаться с 'data:image/svg+xml;base64,'.
  
  Передайте имя вспомогательного класса Dashicons, чтобы использовать шрифтовой значок, например 'dashicons-chart-pie'.
  
  Передайте 'none', чтобы оставить div.wp-menu-image пустым и добавить значок через CSS.
- `$position` `int|float` — необязательный, по умолчанию `null`. Позиция в порядке меню, на которой должен появиться этот пункт.

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

`string`

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

Файл: `wp-admin/includes/plugin.php:1391`

```php
function add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $callback = '', $icon_url = '', $position = null ) {
	global $menu, $admin_page_hooks, $_registered_pages, $_parent_pages;

	$menu_slug = plugin_basename( $menu_slug );

	$admin_page_hooks[ $menu_slug ] = sanitize_title( $menu_title );

	$hookname = get_plugin_page_hookname( $menu_slug, '' );

	if ( ! empty( $callback ) && ! empty( $hookname ) && current_user_can( $capability ) ) {
		add_action( $hookname, $callback );
	}

	if ( empty( $icon_url ) ) {
		$icon_url   = 'dashicons-admin-generic';
		$icon_class = 'menu-icon-generic ';
	} else {
		$icon_url   = set_url_scheme( $icon_url );
		$icon_class = '';
	}

	$new_menu = array( $menu_title, $capability, $menu_slug, $page_title, 'menu-top ' . $icon_class . $hookname, $hookname, $icon_url );

	if ( null !== $position && ! is_numeric( $position ) ) {
		_doing_it_wrong(
			__FUNCTION__,
			sprintf(
				/* translators: %s: add_menu_page() */
				__( 'The seventh parameter passed to %s should be numeric representing menu position.' ),
				'<code>add_menu_page()</code>'
			),
			'6.0.0'
		);
		$position = null;
	}

	if ( null === $position || ! is_numeric( $position ) ) {
		$menu[] = $new_menu;
	} elseif ( isset( $menu[ (string) $position ] ) ) {
		$collision_avoider = (int) base_convert( substr( md5( $menu_slug . $menu_title ), -4 ), 16, 10 ) * 0.00001;
		$position          = (string) ( $position + $collision_avoider );
		$menu[ $position ] = $new_menu;
	} else {
		/*
		 * Cast menu position to a string.
		 *
		 * This allows for floats to be passed as the position. PHP will normally cast a float to an
		 * integer value, this ensures the float retains its mantissa (positive fractional part).
		 *
		 * A string containing an integer value, eg "10", is treated as a numeric index.
		 */
		$position          = (string) $position;
		$menu[ $position ] = $new_menu;
	}

	$_registered_pages[ $hookname ] = true;

	// No parent as top level.
	$_parent_pages[ $menu_slug ] = false;

	return $hookname;
}
```

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

- 1.5.0 — Introduced.

## Связанные

Использует: [`get_plugin_page_hookname`](https://chugunov.pro/api-wordpress/functions/get_plugin_page_hookname/), [`sanitize_title`](https://chugunov.pro/api-wordpress/functions/sanitize_title/), [`set_url_scheme`](https://chugunov.pro/api-wordpress/functions/set_url_scheme/), [`plugin_basename`](https://chugunov.pro/api-wordpress/functions/plugin_basename/), [`current_user_can`](https://chugunov.pro/api-wordpress/functions/current_user_can/), [`__`](https://chugunov.pro/api-wordpress/functions/__/), [`_doing_it_wrong`](https://chugunov.pro/api-wordpress/functions/_doing_it_wrong/), [`add_action`](https://chugunov.pro/api-wordpress/functions/add_action/).
Используется в: [`add_object_page`](https://chugunov.pro/api-wordpress/functions/add_object_page/), [`add_utility_page`](https://chugunov.pro/api-wordpress/functions/add_utility_page/).

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