Переопределение позиции элемента в меню плагина WordPress

Вопрос или проблема

У меня вопрос. Я создал плагин с меню и хочу показать его под пунктом меню «Приборная панель». В некоторых установках 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

Объяснение кода

  1. Приоритет в хукe add_action: Установив приоритет на 99, вы делаете вашу функцию более приоритетной по сравнению с другими функциями, добавляющими меню. Если в вашей установке WordPress другие плагины добавляют свои меню, можно попробовать установить приоритет ниже, например 1 или 2. Это поможет в некоторых случаях, когда другие плагины могут изменять порядок.

  2. Подменю: Функция add_submenu_page() добавляет новое подменю под меню «Приборная панель» (то есть ‘index.php’). Убедитесь, что slug, который вы используете, уникален и не конфликтует с другими меню или подменю в ваших установках WordPress.

  3. Функция выводимого содержимого: Не забудьте определить функцию your_call_function, которая будет выводить содержимое страницы вашего плагина.

Дополнительные рекомендации

  • Правильное использование слуг: Убедитесь, что pluginname-hello — это уникальный slug, и не существует других плагинов, использующих тот же slug, чтобы избежать конфликции.

  • Тестирование в нескольких установках: Если в некоторых установках ваше меню перезаписывается, это может быть связано с другими плагинами. Попробуйте отключить другие плагины и следить за загрузкой вашего меню.

  • Дебаггинг: Вы можете попробовать временно добавлять логи для проверки порядка выполнения вашего кода и видеть, как другие элементы меню добавляются.

Следуя этим рекомендациям и исправлениям, ваше меню должно корректно отображаться под «Приборной панелью» без каких-либо проблем.

Оцените материал
Добавить комментарий

Капча загружается...