# Функция ADD_MENU_PAGE() │ WP 1.5.0
Функция add_menu_page() добавляет основной элемент меню в панель управления WordPress (рядом с такими элементами, как Записи, Страницы, Пользователи и т. д.).
Эта функция используется для создания элемента меню на приборной панели и привязывает к нему функцию, которая будет отвечать за отображение содержимого страницы.
Если вам нужно добавить подпункт в меню, используйте функцию add_submenu_page().
Если при посещении страницы меню вы получаете ошибку "У вас недостаточно прав для доступа к этой странице", это означает, что функцию вызывают слишком рано. Вам нужно вызывать эту функцию в действии admin_menu.
## Примечания
1. Эта функция принимает параметр «capability» (право доступа), который используется для определения, должен ли отображаться элемент меню. Это право доступа также применяется для проверки доступа к странице меню.
2. Если вы используете API настроек для сохранения данных и хотите, чтобы эта функциональность работала для пользователей с правами ниже администратора, вам нужно изменить разрешения с помощью хука option_page_capability_{$option_group}. Здесь $option_group — это то же самое, что и $menu_slug.
Пример того, как разрешить пользователям с правами редактора изменять настройки:
```php
add_action( 'admin_menu', 'register_my_page' );
add_filter( 'option_page_capability_my_page_slug', 'my_page_capability' );
// Добавить новый элемент меню для редакторов
function register_my_page(){
add_menu_page( 'Мой заголовок страницы', 'Моя страница', 'edit_others_posts', 'my_page_slug', 'my_page_function', plugins_url( 'myplugin/images/icon.png' ), 6 );
}
// Изменить права доступа
function my_page_capability( $capability ) {
return 'edit_others_posts';
}
Возврат
Строка. Возвращает суффикс хука для страницы.
Использование
add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );
- $page_title (string) (обязательный): Текст, который будет отображаться в тегах
<title>на странице при выборе пункта меню. - $menu_title (string) (обязательный): Текст, используемый для самого меню.
- $capability (string) (обязательный): Права доступа, необходимые для отображения этого меню пользователю. Список ролей и прав.
- $menu_slug (string) (обязательный): Уникальное имя для ссылки на это меню, должны включать только строчные буквы, цифры, дефисы и символы подчеркивания.
Если параметр $function не указан, вам нужно указать имя PHP-файла (относительно каталога плагина) в этом параметре. Этот файл будет отвечать за вывод содержимого страницы данного элемента меню. Вы также можете указать произвольную ссылку (URL), в этом случае при нажатии на элемент меню вы перейдете по указанному URL.
- $function (callable): Функция, которая будет вызываться для вывода содержимого этой страницы. Этот параметр является необязательным. Если он не указан, WordPress ожидает, что PHP-файл из параметра
$menu_slugсгенерирует страницу админ меню.
Существует несколько вариантов указания этого параметра:
- Если функция является методом класса:
array( $this, 'function_name' )- или статически:
array( __CLASS__, 'function_name' ).
- Имя функции как строка.
По умолчанию: ''
-
$icon_url (string): URL-адрес иконки, которая будет использоваться для этого элемента меню.
- Если вы хотите использовать пользовательскую иконку, укажите URL иконки, например:
plugin_dir_url( __FILE__ ) .'plugin-icon.png'. Размер иконки должен быть не более 20x20 пикселей. - Если вы хотите использовать специальные иконки dashicons, выберите одну из списка dashicons и используйте ее название, например:
dashicons-dashboard. - Важно: начиная с WP 6.0 только форматы SVG могут быть указаны этим способом (png, jpg не сработают).
- Если вы хотите использовать пользовательскую иконку, укажите URL иконки, например:
-
$position (int): Число, определяющее позицию элемента меню. Чем большее число, тем ниже будет элемент меню. Очень важно! Если два элемента используют одно и то же число, один из элементов может быть перезаписан, и только один из двух элементов будет показан. Чтобы избежать такой конфликта, можно использовать дробные числа вместо целых: 63.3 вместо 63. Используйте кавычки: "63.3".
По умолчанию элемент меню будет добавлен в конец списка.
Структура меню:
- 2 – Панель управления
- 4 – Разделитель
- 5 – Записи
- 10 – Медиа
- 15 – Ссылки
- 20 – Страницы
- 25 – Комментарии
- 59 – Разделитель
- 60 – Внешний вид
- 65 – Плагины
- 70 – Пользователи
- 75 – Инструменты
- 80 – Настройки
- 99 – Разделитель
По умолчанию: null
Примеры
Пример 1: Добавление элемента меню, если он еще не добавлен
Для того чтобы убедиться, что элемент меню еще не добавлен, вы можете использовать глобальную переменную $admin_page_hooks:
global $admin_page_hooks;
if( isset($admin_page_hooks['menu_slug']) ){
add_submenu_page( ... );
} else {
add_menu_page( ..., ..., ..., 'menu_slug' );
add_submenu_page( ... );
}
Пример 2: Настройки темы
Этот пример показывает, как добавить страницу настроек темы в главное меню панели управления WordPress.
add_action('admin_menu', function(){
add_menu_page( 'Дополнительные настройки сайта', 'Дополнительные настройки', 'manage_options', 'site-options', 'add_my_setting', '', 4 );
});
function add_my_setting(){
?>
parent_base !== 'options-general' )
settings_errors('option_name');
?>
Пример 3: Добавление элемента меню для администратора
Добавить элемент меню, который виден только администраторам:
1-й вариант (только для плагинов):
add_action( 'admin_menu', 'register_my_custom_menu_page' );
function register_my_custom_menu_page(){
add_menu_page(
'Заголовок пользовательского меню', 'Пользовательское меню', 'manage_options', 'myplugin/myplugin-admin.php', '', plugins_url( 'myplugin/images/icon.png' ), 6
);
}
В этом случае код страницы меню должен находиться в файле wp-content/plugins/myplugin/myplugin-admin.php:
2-й вариант:
add_action( 'admin_menu', 'register_my_custom_menu_page' );
function register_my_custom_menu_page(){
add_menu_page(
'Заголовок пользовательского меню', 'Пользовательское меню', 'manage_options', 'custompage', 'my_custom_menu_page', plugins_url( 'myplugin/images/icon.png' ), 6
);
}
function my_custom_menu_page(){
echo "Некоторый код страницы.";
}
Пример 4: Проверка наличия элемента меню или подпункта
Эта функция проверяет, существует ли элемент меню или подпункта по его идентификатору (slug).
function is_admin_menu_item_exists( $handle, $sub = false ){
if( !is_admin() || (defined('DOING_AJAX') && DOING_AJAX) )
return false;
global $menu, $submenu;
$check_menu = $sub ? $submenu : $menu;
if( empty($check_menu) )
return false;
foreach( $check_menu as $k => $item ){
if( $sub ){
foreach( $item as $sm ){
if( $handle == $sm[2] )
return true;
}
}
elseif( $handle == $item[2] )
return true;
}
return false;
}
Пример 5: Элемент меню с ссылкой на редактирование записи
Предположим, мы хотим добавить произвольную ссылку в меню: /wp-admin/post.php?post=270&action=edit:
add_action( 'admin_menu', 'change_menu' );
function change_menu() {
$post_id = 393;
$url_edit = get_edit_post_link( $post_id );
if ( $url_edit ) {
add_menu_page( '', 'Моя статья', 'edit_posts', $url_edit, '', '', 5 );
}
}
Примечания
- Глобальные. Массивы:
$menu,$admin_page_hooks,$_registered_pages,$_parent_pages.
Изменения
С версии 1.5.0.