6.2 Подменю

Добавление подменю

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

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

Пример

Допустим, мы хотим добавить подменю «Параметры WPOrg» (WPOrg Options) в меню верхнего уровня «Инструменты» (Tools).

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

Мы рекомендуем обернуть ваш HTML с помощью <div> с классом wrap.
function wporg_options_page_html() {
    // check user capabilities
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    ?>
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <form action="options.php" method="post">
            <?php
            // output security fields for the registered setting "wporg_options"
            settings_fields( 'wporg_options' );
            // output setting sections and their fields
            // (sections are registered for "wporg", each field is registered to a specific section)
            do_settings_sections( 'wporg' );
            // output save settings button
            submit_button( __( 'Save Settings', 'textdomain' ) );
            ?>
        </form>
    </div>
    <?php
}

Вторым шагом будет регистрация нашего подменю “WPOrg Options”. Регистрация должна произойти во время перехвата действия admin_menu.

function wporg_options_page()
{
    add_submenu_page(
        'tools.php',
        'WPOrg Options',
        'WPOrg Options',
        'manage_options',
        'wporg',
        'wporg_options_page_html'
    );
}
add_action('admin_menu', 'wporg_options_page');

Список параметров и то, что каждый из них делает, смотрите в справке add_submenu_page().

Предопределённые подменю

Было бы здорово, если бы у нас были вспомогательные функции, определяющие $parent_slug для встроенного меню верхнего уровня WordPress и избавляющие нас от ручного поиска по исходному коду?

Ниже приведен список родительских слагов и их вспомогательных функций:

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

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

Отправка форм

Процесс обработки отправки форм в подменю точно такой же, как и отправка форм в меню верхнего уровня.

add_submenu_page() вместе со всеми функциями для предопределенных подменю (add_dashboard_page, add_posts_page и т.д.) вернет $hookname, которое вы можете использовать в качестве первого параметра add_action для обработки отправки форм на пользовательских страницах:

function wporg_options_page() {
    $hookname = add_submenu_page(
        'tools.php',
        'WPOrg Options',
        'WPOrg Options',
        'manage_options',
        'wporg',
        'wporg_options_page_html'
    );
 
    add_action( 'load-' . $hookname, 'wporg_options_page_html_submit' );
}
 
add_action('admin_menu', 'wporg_options_page');

Как всегда, не забудьте проверить, отправляется ли форма, выполнить проверку CSRF, валидацию и очистку.

Наверх ↑