WordPress: основное меню

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

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

<?php
add_menu_page(
    string $page_title,
    string $menu_title,
    string $capability,
    string $menu_slug,
    callable $function = '',
    string $icon_url = '',
    int $position = null
);

Пример

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

Первый этап — это создать функцию, которая будет выводить 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_menu_page(
        'Bologer',
        'Bologer настройки',
        'manage_options',
        'bologer',
        'bologer_options_page_html',
        plugin_dir_url(__FILE__) . 'images/icon-bologer.png',
        20
    );
}
add_action('admin_menu', 'bologer_options_page');

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

Используем PHP файл для вывода HTML

Лучшим вариантом будет, если вместо callback функции вы будите использовать PHP файл.

Чтобы указать файл, вы можете указать путь до файла в  $menu_slug и null вместо callback функции:

<?php
function wporg_options_page()
{
    add_menu_page(
        'WPOrg',
        'WPOrg Options',
        'manage_options',
        plugin_dir_path(__FILE__) . 'admin/view.php',
        null,
        plugin_dir_url(__FILE__) . 'images/icon_wporg.png',
        20
    );
}
add_action('admin_menu', 'wporg_options_page');

Удалить основное меню

Для удаления основного меню в админ панели WordPress используйте функцию remove_menu_page():

<?php
remove_menu_page(
    string $menu_slug
);

Удаляя меню, вы не препятствуете прямому доступу к ним. Это никогда не должно быть использовано как способ ограничения пользовательских прав.

Пример

Давайте представим, что нам нужно удалить основное меню «Инструменты», сделать это можно следующим образом:

<?php
function wporg_remove_options_page()
{
    remove_menu_page('tools.php');
}
add_action('admin_menu', 'wporg_remove_options_page', 99);

Важно, чтобы вы зарегистрировали меню используя хук admin_menu, с более высоким приоритетом в add_action().