Удаление пунктов меню в админке 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()
Удаляет вложенный элемент меню.
<?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');

Миша
Недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.
Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.
Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.
Спасибо за информацию,век живи и век учись!
Спасибки, статья очень интересная и уже пригодилась.
Подскажите как вывести профиль пользователя на отдельную страницу?
Что бы пользователь вообще не попадал в админ панель, то есть если он захочет посмотреть свой профиль или отредактировать его то при нажитие на ссылку мой профиль он не попадал в админку а профиль его загружался на обычной странице и там он мог менять его
создаешь обычную вордпрессовскую страницу с шаблоном)
а потом админку можно закрыть от пользователей, для того чтобы более продвинутые не впечатывали в адресную строку /wp-admin вот тут подробнее https://misha.agency/blog/wordpress/disable-wp-admin.html
Статья КЛАСС! По крайней мере показала пути поиска проблем, но вот своего вопроса не доковыряюсь. А вопрос вот в чём: Убрать ССЫЛКУ от кнопки рубрики-категории (корневой) в навигационном меню. Более просто: Не хочу, к примеру, показывать все новости оптом, а только подкатегориями: новости на суше, новости на воде, новости в небе ,и т.д. А кнопка НОВОСТИ (корневая) не должна активироваться. Помогите с решением, Пожалуйста. Заранее благодарен.
меню выводится через функцию wp_nav_menu() ?
Так, привожу часть кода с хидера
Понятно, тогда при добавлении пункта меню НОВОСТИ в админке, нужно в качестве URL указать символ #
А можно удалить эти пункты только для некоторых типов пользователей, а то они у всех исчезают, включая админа.
А то благодаря Вашей прошлой статье я закрыл доступ к странице, но было бы хорошо ещё и удалить эти пункты меню.
Пример страницы: "/admin.php?page=storefront-welcome"
Спасибо.
Статья хорошая. Но непонятно, как удалить ссылки меню, которые образовались при установке сторонних плагинов.
Например у меня стоит слайдер Meta Slider. В админ меню выводится его название. Хотелось бы его скрыть. Если подставить его ссылку
ничего не получается. Меню не пропадает.
Спасибо.
Просто поставьте на фильтр
admin_menu
высокий приоритет.Не совсем понятно.
Можно поподробней?
Я имел ввиду вот это:
Пункт меню не удаляется
http://site.ru/wp-admin/admin.php?page=metaslider
Прописываю
site.ru-естественно условный домен (сайт в режиме тестирования)
Версия WordPress 4.3 Beta 2
Похоже, что слайдер лучше убрать через
display:none
. Страница же в любом случае остаётся — скрывается лишь пункт меню.Спасибо Миша, нашел ответ на одном из форумов.
Прописываем
А вызов функции, как вы советовали
Без приоритета работать не будет. За это отдельное спасибо.
Ок, отлично, рад, что разобрались.
Миша, подскажите, пожалуйста, как убрать из админки подпункт "Настроить" меню "Внешний вид".
не работает. Наверно, потому что это поп-ап, и к основной ссылке на каждом экране админки добавляется параметр возврата на исходную страницу.
Спасибо.
Попробуйте это: