Вопрос или проблема
У меня вопрос. Я создал плагин с меню и хочу показать его под пунктом меню «Приборная панель». В некоторых установках WordPress пункт «Приборная панель» будет перезаписан. Как я могу это исправить?
Мой код для добавления меню:
add_menu_page('pluginname', 'pluginname', 'manage_options', 'pluginname-hello', '', 'dashicons-admin-site', 2);
add_submenu_page('index.php', __('Plugin Name from page', 'pluginname'), 'Plugin Name', 'manage_options', 'pluginname-hello', 'you_call_function' );
pluginname-hello
– Уникальное имя для этого меню (должно быть уникальным).
you_call_function
– Функция, которая будет вызвана для отображения содержимого этой страницы.
Дополнительная информация:
https://developer.wordpress.org/reference/functions/add_submenu_page/
Код должен работать. Добавьте код в functions.php и проверьте результат.
function admin_menu(){
add_menu_page('pluginname', 'pluginname', 'manage_options', 'pluginname-hello', '', 'dashicons-admin-site', 2);
}
add_action('admin_menu', 'admin_menu', 99);
//add_action('admin_menu', array($this, 'admin_menu'), 99); //для классов.
Если проблема не исчезнет, измените приоритет хука admin_menu, например, с 99 на 1 или 2 в зависимости от ваших нужд.
Ответ или решение
Для того чтобы корректно добавить ваше меню плагина под пунктом «Приборная панель» в админ-панели WordPress и избежать его перезаписи, вам необходимо учитывать несколько моментов в вашем коде.
Во-первых, вы правильно используете функцию add_submenu_page()
, чтобы добавить ваш пункт в качестве подменю к элементу меню «Приборная панель», однако есть несколько рекомендаций и возможных исправлений, которые могут помочь.
Пример кода
Вот исправленный и улучшенный вариант вашего кода:
function admin_menu() {
// Добавление главного пункта меню (если нужно)
add_menu_page(
'pluginname', // Заголовок страницы
'pluginname', // Название меню
'manage_options', // Возможности
'pluginname', // Уникальный slug
'', // Функция вывода содержимого (если необходимо)
'dashicons-admin-site', // Иконка
2 // Позиция
);
// Добавление подменю под пунктом «Приборная панель»
add_submenu_page(
'index.php', // Родительский slug, в данном случае «index.php» для «Приборной панели»
__('Имя вашего плагина', 'pluginname'), // Заголовок страницы
'Имя плагина', // Название меню
'manage_options', // Возможности
'pluginname-hello', // Уникальный slug для подменю
'your_call_function' // Функция для вывода содержимого
);
}
add_action('admin_menu', 'admin_menu', 99); // Вызываем функцию с приоритетом 99
Объяснение кода
-
Приоритет в хукe
add_action
: Установив приоритет на 99, вы делаете вашу функцию более приоритетной по сравнению с другими функциями, добавляющими меню. Если в вашей установке WordPress другие плагины добавляют свои меню, можно попробовать установить приоритет ниже, например 1 или 2. Это поможет в некоторых случаях, когда другие плагины могут изменять порядок. -
Подменю: Функция
add_submenu_page()
добавляет новое подменю под меню «Приборная панель» (то есть ‘index.php’). Убедитесь, что slug, который вы используете, уникален и не конфликтует с другими меню или подменю в ваших установках WordPress. -
Функция выводимого содержимого: Не забудьте определить функцию
your_call_function
, которая будет выводить содержимое страницы вашего плагина.
Дополнительные рекомендации
-
Правильное использование слуг: Убедитесь, что
pluginname-hello
— это уникальный slug, и не существует других плагинов, использующих тот же slug, чтобы избежать конфликции. -
Тестирование в нескольких установках: Если в некоторых установках ваше меню перезаписывается, это может быть связано с другими плагинами. Попробуйте отключить другие плагины и следить за загрузкой вашего меню.
-
Дебаггинг: Вы можете попробовать временно добавлять логи для проверки порядка выполнения вашего кода и видеть, как другие элементы меню добавляются.
Следуя этим рекомендациям и исправлениям, ваше меню должно корректно отображаться под «Приборной панелью» без каких-либо проблем.