Удаление пунктов меню в админке WordPress

Вопрос — зачем?

Ну предположим, что вы делаете сайт для кого-то и не хотите чтобы например пункт «Ссылки» мозолил ему глаза.

меню в админке wordpress

Конечно, полного отключения функционала ссылок таким образом мы не добьёмся, да и не нужно это нам, т.е. хоть элемент меню и пропадёт, страница ссылок по-прежнему будет доступна по адресу: wp-admin/link-manager.php

remove_menu_page()

Удаляет родительский элемент меню и все вложенные в него.

<?php remove_menu_page( $menu_slug ) ?>

Функция возвращает true, если меню удалено и false, если не найдено.

Как узнать $menu_slug? Очень просто — по ссылке, тем не менее я перечислю здесь все стандартные.

  • Консоль — index.php
  • Записи — edit.php
  • Медиафайлы — upload.php
  • Ссылки — link-manager.php
  • Страницы — edit.php?post_type=page
  • Комментарии — edit-comments.php
  • Внешний вид — themes.php
  • Плагины — plugins.php
  • Пользователи — users.php
  • Инструменты — tools.php
  • Параметры — options-general.php

Я всё ещё хочу удалить пункт меню «Ссылки», покажу это на примере:

function remove_admin_menu_items() {
	remove_menu_page('link-manager.php');
}
 
add_action( 'admin_menu', 'remove_admin_menu_items' );

Как видите, это делается через хук, функцию разумеется можете назвать как угодно, код вставляется в functions.php активной темы.

remove_submenu_page()

субменю в админке wordpress

Удаляет вложенный элемент меню.

<?php remove_submenu_page( $menu_slug, $submenu_slug ) ?>

$submenu_slug — ярлык вложенного элемента меню, который вы хотите удалить, а параметр $menu_slug — это ярлык его родительского элемента.

Пожалуй, стоит перечислить все $submenu_slug стандартных пунктов меню (для тех, кто так и не разобрался).

  • Главная — index.php
  • Обновления — update-core.php
  • Все записи — edit.php
  • Добавить новую — post-new.php
  • Рубрики — edit-tags.php?taxonomy=category
  • Метки — edit-tags.php?taxonomy=post_tag
  • Библиотека — upload.php
  • Добавить новый — media-new.php
  • Все ссылки — link-manager.php
  • Добавить новую — link-add.php
  • Рубрики ссылок — edit-tags.php?taxonomy=link_category
  • Все страницы — edit.php?post_type=page
  • Добавить новую — post-new.php?post_type=page
  • Темы — themes.php
  • Виджеты — widgets.php
  • Меню — nav-menus.php
  • Редактор — theme-editor.php
  • Установленные — plugins.php
  • Добавить новый — plugin-install.php
  • Редактор — plugin-editor.php
  • Все пользователи — users.php
  • Добавить нового — user-new.php
  • Ваш профиль — profile.php
  • Все инструменты — tools.php
  • Импорт — import.php
  • Экспорт — export.php
  • Установка сети — network.php
  • Общие — options-general.php
  • Написание — options-writing.php
  • Чтение- options-reading.php
  • Обсуждение — options-discussion.php
  • Медиафайлы — options-media.php
  • Приватность — options-privacy.php
  • Постоянные ссылки — options-permalink.php

И небольшой пример. Сейчас мы удалим подпункт меню «Обновления».

function remove_admin_submenu_items() {
	remove_submenu_page( 'index.php', 'update-core.php' );
}
 
add_action( 'admin_menu', 'remove_admin_submenu_items');

Смотрите также

Комментарии 19

  • BlockHoster2 марта 2012 в 21:03 #

    Спасибо за информацию,век живи и век учись!

  • dushka7 апреля 2012 в 14:04 #

    Спасибки, статья очень интересная и уже пригодилась.

  • BASoftWARe6 октября 2012 в 15:10 #

    Подскажите как вывести профиль пользователя на отдельную страницу?
    Что бы пользователь вообще не попадал в админ панель, то есть если он захочет посмотреть свой профиль или отредактировать его то при нажитие на ссылку мой профиль он не попадал в админку а профиль его загружался на обычной странице и там он мог менять его

    • Миша6 октября 2012 в 21:10 #

      создаешь обычную вордпрессовскую страницу с шаблоном)
      а потом админку можно закрыть от пользователей, для того чтобы более продвинутые не впечатывали в адресную строку /wp-admin вот тут подробнее https://truewp.ru/blog/wordpress/disable-wp-admin.html

  • Николай15 ноября 2013 в 00:11 #

    Статья КЛАСС! По крайней мере показала пути поиска проблем, но вот своего вопроса не доковыряюсь. А вопрос вот в чём: Убрать ССЫЛКУ от кнопки рубрики-категории (корневой) в навигационном меню. Более просто: Не хочу, к примеру, показывать все новости оптом, а только подкатегориями: новости на суше, новости на воде, новости в небе ,и т.д. А кнопка НОВОСТИ (корневая) не должна активироваться. Помогите с решением, Пожалуйста. Заранее благодарен.

  • Михаил Ж14 февраля 2015 в 21:02 #

    А можно удалить эти пункты только для некоторых типов пользователей, а то они у всех исчезают, включая админа.
    А то благодаря Вашей прошлой статье я закрыл доступ к странице, но было бы хорошо ещё и удалить эти пункты меню.

    Пример страницы: "/admin.php?page=storefront-welcome"
    Спасибо.

  • Сергей10 июля 2015 в 22:07 #

    Статья хорошая. Но непонятно, как удалить ссылки меню, которые образовались при установке сторонних плагинов.
    Например у меня стоит слайдер Meta Slider. В админ меню выводится его название. Хотелось бы его скрыть. Если подставить его ссылку

    remove_menu_page('admin.php?page=metaslider');

    ничего не получается. Меню не пропадает.
    Спасибо.

    • Миша11 июля 2015 в 08:07 #

      Просто поставьте на фильтр admin_menu высокий приоритет.

      • Сергей11 июля 2015 в 08:07 #

        Не совсем понятно.
        Можно поподробней?

        • Миша12 июля 2015 в 08:07 #

          Я имел ввиду вот это:

          add_action( 'admin_menu', 'ваша_функция', 9999 );
          • Сергей13 июля 2015 в 13:07 #

            Пункт меню не удаляется
            http://site.ru/wp-admin/admin.php?page=metaslider
            Прописываю

            remove_menu_page( 'admin.php?page=metaslider' );

            site.ru-естественно условный домен (сайт в режиме тестирования)
            Версия WordPress 4.3 Beta 2

            • Миша14 июля 2015 в 12:07 #

              Похоже, что слайдер лучше убрать через display:none. Страница же в любом случае остаётся — скрывается лишь пункт меню.

              • Сергей14 июля 2015 в 12:07 #

                Спасибо Миша, нашел ответ на одном из форумов.
                Прописываем

                remove_menu_page('metaslider');

                А вызов функции, как вы советовали

                add_action( 'admin_menu', 'ваша_функция', 9999 );

                Без приоритета работать не будет. За это отдельное спасибо.

  • Андрей2 ноября 2015 в 09:11 #

    Миша, подскажите, пожалуйста, как убрать из админки подпункт "Настроить" меню "Внешний вид".

    remove_submenu_page( 'themes.php', 'customize.php' );

    не работает. Наверно, потому что это поп-ап, и к основной ссылке на каждом экране админки добавляется параметр возврата на исходную страницу.

    Спасибо.

    • Миша4 ноября 2015 в 09:11 #

      Попробуйте это:

      function remove_admin_menu_items() {
      	global $submenu;
      	unset($submenu['themes.php'][6]);
      }
       
      add_action( 'admin_menu', 'remove_admin_menu_items' );

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Комментарии закрыты.