Как скрыть пункты меню WordPress

Скроем отображение неиспользуемых пунктов меню в админке WordPress, изменим их порядок. А так же рассмотрим, как отключить редактор WordPress для определённых страниц.

Содержание:

  1. Удаление главных пунктов меню;
  2. Удаление вложенных пунктов меню;
  3. Произвольная сортировка пунктов меню;
  4. Отключение редактора.
  5. Отключение редактора на определённых страницах.
Удаление пунктов меню WordPress

Удаление пунктов меню верхнего уровня — remove_menu_page()

Чтобы скрыть необходимый пункт меню в админке, добавьте следующий код в functions.php.

add_action("admin_menu", "remove_menus");
function remove_menus() {
    remove_menu_page("index.php");                # Консоль
    remove_menu_page("edit.php");                 # Записи
    remove_menu_page("edit-comments.php");        # Комментарии
    remove_menu_page("edit.php?post_type=page");  # Страницы
    remove_menu_page("upload.php");               # Медиафайлы
    remove_menu_page("themes.php");               # Внешний вид
    remove_menu_page("plugins.php");              # Плагины
    remove_menu_page("users.php");                # Пользователи
    remove_menu_page("tools.php");                # Инструменты
    remove_menu_page("options-general.php");      # Параметры
    remove_menu_page("edit.php?post_type=acf-field-group"); # ACF
}

Если вам необходимо скрыть ещё какие-то пункты меню, которые не были указаны, то можете вывести их названия с помощью следующего кода.

add_action("admin_notices", "debug_admin_menus");
function debug_admin_menus()
{
    global $menu, $pagenow;
    if ($pagenow == "index.php") { // выводим только в «Консоли»
        foreach ($menu as $menu_item) {
            echo "remove_menu_page("$menu_item[2]");<br>";
        }
    }
}

Удаление подпунктов меню — remove_submenu_page()

Для удаления будем использовать функцию:

remove_submenu_page($menu_slug, $submenu_slug);
  • $menu_slug — ключ массива;
  • $submenu_slug — элемент под индексом 2.

Для получения данных о меню, воспользуйтесь функцией debug_admin_menus().

add_action("admin_notices", "debug_admin_menus");
function debug_admin_menus()
{
    global $submenu, $pagenow;
    if ($pagenow == "index.php") {
        echo "<pre>" . print_r($submenu, true) . "</pre>";
    }
}

Несколько примеров:

add_action("admin_menu", "remove_menus", 99999);
function remove_menus()
{
    remove_submenu_page("edit.php", "edit-tags.php?taxonomy=post_tag"); # «Записи» - «Метки»
    remove_submenu_page("themes.php", "theme-editor.php");              # «Внешний вид» - «Редактор тем»
    remove_submenu_page("woocommerce", "wc-admin");                     # «WooCommerce» - «Главная»
}

Как изменить порядок пунктов меню в админке WordPress

Чтобы изменить стандартный порядок пунктов меню в админке на произвольный, необходимо лишь переставить пункты местами в следующем коде.

if (is_admin()) {
    add_filter("custom_menu_order", "__return_true"); # включаем ручную сортировку
    add_filter("menu_order", "custom_menu_order"); # ручная сортировка
    function custom_menu_order($menu_order)
    {
        if (!$menu_order) return true;
        return array(
            "index.php",                      # Консоль

            "edit.php",                       # Записи
            "edit-comments.php",              # Комментарии

            "separator1",                     # ~ Отступ ~

            "edit.php?post_type=page",        # Страницы
            "edit.php?post_type=services",    # Услуги
            "edit.php?post_type=doctors",     # Врачи
            "edit.php?post_type=reviews",     # Отзывы
            "edit.php?post_type=sertificate", # Сертификаты
            "edit.php?post_type=stocks",      # Акции
            "edit.php?post_type=works",       # Работы клиники

            "separator1",                     # ~ Отступ ~

            "upload.php",                     # Медиафайлы
            "themes.php",                     # Внешний вид
            "plugins.php",                    # Плагины
            "users.php",                      # Пользователи
            "tools.php",                      # Инструменты
            "options-general.php",            # Настройки
        );
    }
}

Как отключить редактор WordPress

Отключение редактора WordPress

Для отключения редактора WordPress на всех страницах воспользуемся функцией remove_post_type_support.

add_action("admin_init", "disable_content_editor");
function disable_content_editor()
{
    remove_post_type_support("page", "editor");
}

Для всех статей отключение редактора будет выглядеть следующим образом.

add_action("admin_init", "disable_content_editor");
function disable_content_editor()
{
    remove_post_type_support("post", "editor");
}

Отключить редактор WordPress на определённых страницах

Отключим редактор WordPress на страницах с определённым шаблоном.

add_action("admin_init", "hide_editor");
function hide_editor()
{
    // Получаем id записи
    if (isset($_GET["post"])) $post_id = $_GET["post"];
    else $post_id = $_POST["post_ID"];

    if (!isset($post_id) || empty($post_id)) return;

    // Получаем название шаблона страницы
    $template_file = get_post_meta($post_id, "_wp_page_template", true);

    if ( // Названия шаблонов
        $template_file == "index.php" ||
        $template_file == "page-about.php" ||
        $template_file == "page-projects.php" ||
        $template_file == "page-join.php"
    ) {
        remove_post_type_support("page", "editor");
    }
}

На страницах с определёнными ID.

// Disable editor
add_action('admin_init', 'hide_editor');
function hide_editor()
{
    if (!isset($_GET['post']) || empty($_GET['post'])) return;

    if (in_array($_GET['post'], array(13))) {
        remove_post_type_support('page', 'editor');
    }
}