Вопрос или проблема
Извините, если этот вопрос уже задавался; я искал ответ некоторое время, но не нашел ничего, что напрямую подходит. Я создаю свой первый плагин и стараюсь следовать лучшим практикам WP.
Структура моего плагина выглядит следующим образом:
- my-plugin
-- index.php
-- admin (папка)
--- sub-menu-page.php
Я пытаюсь держать все страницы плагина отдельно в рамках своей организации. Однако я не могу указать ссылку подменю плагина на файл sub-menu-page.php
. Вот мой код меню:
add_action('admin_menu', 'my_menu_pages');
function my_menu_pages(){
add_menu_page('WISE Admin', 'WISE Admin', 'manage_options', 'wise-menu', 'my_menu_output', 'dashicons-tickets', 2 );
add_submenu_page('wise-menu', 'Общие настройки', 'Общие', 'manage_options', 'general-settings', 'general_settings' );
add_submenu_page('wise-menu', 'Подменю', 'Подменю', 'manage_options', 'admin/sub-menu-page' );
remove_submenu_page('wise-menu', 'wise-menu');
}
Ссылка подменю ведет на /wp-admin/admin/sub-menu-page
, что, очевидно, не то место, куда я хочу попасть.
Не могли бы вы дать совет, что я делаю не так?
Вы очень близки.
Когда вы добавляете свою первую страницу подменю, вам следует продублировать вашу первоначальную страницу меню. Во втором add_submenu_page
вам не хватает функции обратного вызова для этой страницы. Технически этот параметр является необязательным, но он изменяет ваш URL с /wp-admin/sub-menu-page
на /wp-admin/admin.php?page=sub-menu-page
.
Попробуйте это:
add_action( 'admin_menu', 'my_menu_pages' );
function my_menu_pages() {
add_menu_page( 'WISE Admin', 'WISE Admin', 'manage_options', 'wise-menu', 'my_menu_output', 'dashicons-tickets', 2 );
add_submenu_page( 'wise-menu', 'Общие настройки', 'Общие', 'manage_options', 'wise-menu', 'my_menu_output' );
add_submenu_page( 'wise-menu', 'Подменю', 'Подменю', 'manage_options', 'sub-menu-page', 'submenu_settings' );
}
Ответ или решение
Конечно, давайте разберемся с вашей проблемой и исправим структуру вашего плагина в соответствии с лучшими практиками WordPress.
Ваша текущая реализация имеет незначительные недочеты, которые можно поправить. Чтобы правильно указать ссылку на подменю, необходимо не только задать правильный параметр, но и предоставить функцию обратного вызова, которая будет выводить содержимое этой страницы.
Вот переработанный код с корректной реализацией подменю:
add_action('admin_menu', 'my_menu_pages');
function my_menu_pages() {
// Создание главного меню
add_menu_page(
'WISE Admin', // Название страницы
'WISE Admin', // Название меню
'manage_options', // Мин. уровень доступа
'wise-menu', // Уникальный идентификатор
'my_menu_output', // Функция обратного вызова для главной страницы
'dashicons-tickets', // Иконка меню
2 // Позиция в меню
);
// Создание подменю для Общих настроек
add_submenu_page(
'wise-menu', // Родительский идентификатор
'Общие настройки', // Название страницы
'Общие', // Название в меню
'manage_options', // Мин. уровень доступа
'general-settings', // Уникальный идентификатор
'general_settings' // Функция обратного вызова
);
// Создание подменю для Submenu Page
add_submenu_page(
'wise-menu', // Родительский идентификатор
'Submenu Page', // Название страницы
'Submenu Page', // Название в меню
'manage_options', // Мин. уровень доступа
'sub-menu-page', // Уникальный идентификатор
'submenu_settings' // Функция обратного вызова
);
// Удаляем оригинальную страницу, если это необходимо
remove_submenu_page('wise-menu', 'wise-menu');
}
// Функция обратного вызова для Submenu Page
function submenu_settings() {
?>
<div class="wrap">
<h1>Submenu Page</h1>
<p>Здесь будет содержимое вашей страницы подменю.</p>
</div>
<?php
}
Основные изменения:
-
Во втором аргументе
add_submenu_page()
необходимо использовать уникальный идентификатор для страницыsubmenu_page
как'sub-menu-page'
, а не'admin/sub-menu-page'
. -
Важно добавить функцию обратного вызова, которая будет выводить содержимое подменю — в данном случае это функция
submenu_settings()
, которая будет обрабатывать отображение страницы.
Теперь при переходе на подменю вы будете перенаправлены на URL, такой как /wp-admin/admin.php?page=sub-menu-page
, и ваше подменю будет работать правильно.
Следуя этой структуре, вы останетесь в рамках лучших практик разработки плагинов для WordPress и сможете более эффективно управлять страницами вашего плагина. Если у вас есть еще вопросы или вам нужна дополнительная помощь, не стесняйтесь спрашивать!