WordPress: подменю

В этой записи пойдет речь о том, как добавить подменю в WordPress плагине.

Для добавления подменю в админ панели WordPress вы можете воспользоваться функцией add_submenu_page().

<?php
add_submenu_page(
    string $parent_slug,
    string $page_title,
    string $menu_title,
    string $capability,
    string $menu_slug,
    callable $function = ''
);

Пример

Давайте представим, что вам нужно добавить подменю «Bologer настройки» в основное меню «Tools».

Первый этап — это создать функцию, которая будет выводить HTML. Внутри этой функции мы будем проверять безопасность и отображать настройки, которые нужно будет создать используя API настроек.

Я рекомендую обертывать весь HTML внутри функции в <div> с классом wrap.

<?php
function bologer_options_page_html()
{
    // проверить права пользователя
    if (!current_user_can('manage_options')) {
        return;
    }
    ?>
    <div class="wrap">
        <h1><?= esc_html(get_admin_page_title()); ?></h1>
        <form action="options.php" method="post">
            <?php
            // выводим поля, которые сделают bologer_options безопасными 
            settings_fields('bologer_options'); 

            // выводим секцию настроек и её поля 
            // (секция зарегистрирована под "bologer", каждое поле зарегистрированое под этим ключом будет выводиться тут) 
            
            do_settings_sections('bologer'); 

            // выводим кнопку сохранения 
            submit_button('Сохранить');
            ?>
        </form>
    </div>
    <?php
}

Второй этап — это зарегистрировать подменю «Bologer настройки» в основном меню «Инструменты». Для регистрации используйте хук admin_menu:

<?php
function bologer_options_page()
{
    add_submenu_page(
        'tools.php',
        'Bologer настройки',
        'Bologer настройки',
        'manage_options',
        'bologer',
        'bologer_options_page_html'
    );
}
add_action('admin_menu', 'bologer_options_page');

Для более конкретного описания функции, вы можете обратиться к официальной документации add_submenu_page().

Стандартные подменю

Было бы круто, если бы были функции помощники для $parent_slug для стандартным основных меню в WordPress. К счастью такое уже есть, ниже вы можете посмотреть полный список:

Удаление подменю

Процесс удаления подменю точно такое же как и в удалении основного меню.