Как спрятать ненужные пункты в админке WordPress

В прошедшем году я, достаточно часто, получал заказы на разработку сайтов на WordPress. Среди заказов встречались и одностраничники (лендинги) и средней сложности магазины. Пользователи выбирали данную систему из-за того что WordPress имеет наиболее (на мой взгляд и заказчиков) простой интерфейс управления сайтом. Но даже несмотря на это, некоторых заказчиков вводило недоумение наличие неиспользуемых ими пунктов меню административной панели.

Оно и логично. Если не опытный заказчик заказывает лендинг, в котором отсутствуют комментарии, записи с рубрикатором, регистрация пользователей на сайте, тогда зачем ему в панельке эти пункты? Он же выбрал WordPress именно исходя из соображений выбора простой и интуитивно понятной системы, а не системы в которой вывалены на показ нужные и не нужные функции. Конечно можно решить этот вопрос созданием отдельного аккаунта, назначить права для данного аккаунта и указать чем можно пользоваться, а чем нельзя (соответственно, доступные пункты и будут отображены в панели), но не для всех удобна схема в которой придется использовать два аккаунта (один для создания/редактирования записей, второй - для установки плагинов, управления виджетами и т.д.). Поэтому рассмотрим не большой пример как скрыть не нужные нам пункты меню в админке сайта на WordPress.

И так, в файл function.php добавим следущее:
add_action( 'admin_menu', 'xelly_remove_menu_items' );
 
function xelly_remove_menu_items() {
    // тут мы укахываем ярлык пункты который удаляем.
    remove_menu_page('edit-comments.php'); // Удаляем пункт "Комментарии"
    }

Как получить ярлык пункты для удаления из панельки? Очень просто:
Наводим на пункт меню, в подсказке url данного пункты покажется его адрес. Адрес указывается полный (ваш_сайт.ру/ярлык_пункта.php), но нам весь адрес не нужен, а только его часть. Для лучшего восприятия посмотрите на скриншот:

Как мы можем увидеть, после того как навели на "комментарии", нам отобразилась ссылка на пункт меню, мы взяли из ссылки ярлык данного пункта edit-comments.php и использовали его в нашей функции:
 remove_menu_page('edit-comments.php');

Вроде как совсем не сложно получается..

Cделаем оговорку, что данный способ работает на версиях 3.1+ на более старых версиях работать не будет, в виду того, что функции используемые в способе появились в версии 3.1
Пример как скрыть основные пункты меню:
  remove_menu_page( 'index.php' );                  // Консоль
  remove_menu_page( 'edit.php' );                   // Записи
  remove_menu_page( 'upload.php' );                 // Медиафайлы
  remove_menu_page( 'edit.php?post_type=page' );    // Страницы
  remove_menu_page( 'edit-comments.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' );        // Настройки
Также, можно убрать и не нужные подпункты в меню.

Как убрать подпункты в меню

Для того чтоб убрать подпункт в меню, нам нужно указать ярлык основного пункта вместе с ярлыком его подпункта. Наши действия будут очень похожи на предыдущие, за исключением некоторых изменений. Для примера скроем подпункт "Редактор" в пункте "Внешний вид".

Как и прежде, в файл functions.php вставляем следующий код:
add_action( 'admin_menu', 'xelly_remove_sub_menu_items' );
 
    function xelly_remove_sub_menu_items() {
        // Первый параметр это ярлык основного элемента меню
        // Второй параметр это ярлык дочернего элемента данного пункта
        remove_submenu_page( 'themes.php', 'theme-editor.php' );
        }

Как можно увидеть, используя функцию remove_submenu_page() мы указываем ярлык родительского пункта - themes.php и в качестве второго аргумента - ярлык дочернего пункта theme-editor.php

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

Как убрать пункты и подпункты произвольных типов записей с меню

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

Тоже касается и подпунктов, но для примера приведу небольшой сниппет:
Предположим у нас есть тип записей "Testimonials", который имеет подпункты: "Рубрики, Метки"
function xelly_remove_posttype_items() {
// Удаляем основной пункт меню Testimonials
 remove_menu_page( 'edit.php?post_type=testimonials' );
 
// Удаляем подпункт Рубрики
remove_submenu_page( 'edit.php?post_type=testimonials', 'edit-tags.php?taxonomy=category&post_type=testimonials' );
 
// Убираем подпункт Теги
remove_submenu_page( 'edit.php?post_type=testimonials', 'edit-tags.php?taxonomy=post_tag&post_type=testimonials' );

 
add_action( 'admin_menu', 'xelly_remove_posttype_items', 999 );
Еще раз повторюсь, что данный способ можно использовать начиная с версий WP 3.1 Как показала практика, скрытие не нужного от глаз заказчика, достаточно сильно упрощает процесс обучения заказчика управлению сайтом, да и общее впечатление от системы возрастает в разы. А это не мало важно, тем более если вы отдаете предпочтение именно данной системе.
Блог WordPress плагины и хаки Как спрятать ненужные пункты в админке WordPress