Рекомендуемая структура и ссылки страниц подпункта плагина

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

Извините, если этот вопрос уже задавался; я искал ответ некоторое время, но не нашел ничего, что напрямую подходит. Я создаю свой первый плагин и стараюсь следовать лучшим практикам 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
}

Основные изменения:

  1. Во втором аргументе add_submenu_page() необходимо использовать уникальный идентификатор для страницы submenu_page как 'sub-menu-page', а не 'admin/sub-menu-page'.

  2. Важно добавить функцию обратного вызова, которая будет выводить содержимое подменю — в данном случае это функция submenu_settings(), которая будет обрабатывать отображение страницы.

Теперь при переходе на подменю вы будете перенаправлены на URL, такой как /wp-admin/admin.php?page=sub-menu-page, и ваше подменю будет работать правильно.

Следуя этой структуре, вы останетесь в рамках лучших практик разработки плагинов для WordPress и сможете более эффективно управлять страницами вашего плагина. Если у вас есть еще вопросы или вам нужна дополнительная помощь, не стесняйтесь спрашивать!

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

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