WordPress: Как убрать пункты меню в WordPress админке
- 18 октября, 2022
- 12:55 дп
- Нет комментариев
Как убрать верхнее меню WordPress
Начну с самой простой задачи. Речь идет о верхней WordPress панели для работы с сайтом, которая отображается не только в амдинке, но и во фронтенде. Соответствующая опция находится в разделе «Пользователи» — на странице редактирования настроек:
Чтобы отключить верхнюю панель в WordPress вам нужно снять соответствующую галочку в параметрах профиля. По умолчанию, при создании нового пользователя опция является активной.
Если вы хотите деактивировать данную фишку для всех пользователей, дабы не отключать ее каждый раз вручную, можно использовать код:
add_filter('show_admin_bar', '__return_false');
или
show_admin_bar(false);
Размещаете строки в functions.php. Есть еще один вариант, позволяющий убрать верхнюю панель в WordPress всем кроме администратора:
function remove_admin_bar() {
if (!current_user_can('administrator') && !is_admin()) {
show_admin_bar(false);
}
}
В принципе, никакой особо полезной информации/действий она не содержит, всегда деактивирую данную штуку.
Как скрыть пункты меню в WordPress админке
Для этих целей в системе есть 2 функции:
- remove_menu_page — удаляет элементы первого уровня (разделы)
- remove_submenu_page — избавляется от подстраниц (второго уровня).
Разработчики советуют вызывать их исключительно с помощью хука admin_menu иначе могут возникнуть ошибки. Важно(!) Физически страницы настроек никуда не деваются, вы просто прячете их, т.е. по прямым ссылкам они будут доступны! Примеры кодов ниже работают для версий WP 3.1+ (в противном случае гуглите функцию unset). Дополнительно можете почитать как скрыть страницу в Вордпресс фронтенде (для посетителей).
Итак, в качестве параметра для remove_menu_page вставляете название файла, отвечающего за тот или иной раздел, например:
add_action('admin_menu', 'remove_admin_menu');
function remove_admin_menu() {
remove_menu_page('options-general.php'); // Удаляем раздел Настройки
remove_menu_page('tools.php'); // Инструменты
remove_menu_page('users.php'); // Пользователи
remove_menu_page('plugins.php'); // Плагины
remove_menu_page('themes.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('link-manager.php'); // Ссылки
remove_menu_page('wpcf7'); // Contact form 7
remove_menu_page('options-framework'); // Cherry Framework
}
Две последние строки отвечают за скрытие разделов Contact form 7 и фреймворка Cherry.
Чтобы узнать какие названия разделов используются в плагинах, попробуйте добакить хак:
add_action( 'admin_init', 'wpse_136058_debug_admin_menu' );
function wpse_136058_debug_admin_menu() {
echo '
' . print_r( $GLOBALS[ 'menu' ], TRUE) . '
'; }
В админке отобразится массив данных, где элементы показывают опции по каждому из пунктов меню, например:
[11] => Array
(
[0] => WooCheckout
[1] => manage_options
[2] => woocommerce-checkout-manager
[3] => WooCheckout
[4] => menu-top toplevel_page_woocommerce-checkout-manager menu-top-last
[5] => toplevel_page_woocommerce-checkout-manager
[6] => dashicons-businessman
)
Вам нужно значение в [2] то есть в параметрах функции remove_menu_page указываете woocommerce-checkout-manager. Аналогично по всем остальным элементам.
У страниц (edit.php?post_type=page) тоже немного необычный формат. Если на сайте есть другие таксономии, применяете конструкцию:
remove_menu_page('edit.php?post_type=custom-post-name');
Где custom-post-type-name — название таксономии. Когда нужно удалить в меню страницу Wodpress модуля вида wp-admin/admin.php?page=some_pageslug, поможет код:
remove_menu_page('some_pageslug');
Для подстраниц формат записи функции несколько иной, но принцип похожий — подставляете в качестве параметров сначала название раздела, а потом конкретного подпункта:
add_action('admin_menu', 'remove_admin_menu', 999);
function remove_admin_menu() {
remove_submenu_page( 'themes.php', 'themes.php'); // Удаляем подпункт с выбором тем
remove_submenu_page( 'themes.php', 'theme-editor.php'); // Редактирование шаблона
remove_submenu_page( 'themes.php', 'theme_options' ); // Настройки темы
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' ); // Скрытие Тегов для Постов
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=category' ); // Скрытие Категорий для Постов
}
Фишка применения remove_submenu_page в том, что вы сможете скрыть пункт меню в админке WordPress второго уровня, а сам раздел (Посты, Внешний вид) останется.
Также вы могли заметить, что в последнем случае вызова add_action я использовал приоритет = 999. Дело в том, что некоторые строки не всегда срабатывают без него — насколько я помню, это касалось модулей и раздела Внешний вид. В сети находил варианты 99, 500, но 999 надежнее.
Убрать специальные разделы таксономий темы
В некоторых платных премиум шаблонах разработчики добавляют специальные сущности для сайта — отзывы, FAQ, портфолио, услуги и т.п. Если вам не нужны какие-то из этих объектов, поищите в файлах шаблона, где они были созданы (функция register_post_type).
В моем случае код находится в файле theme-init.php. Открываем и смотрим его содержимое — там после задания соответствующих параметров таксономий идет активация через add_action. Чтобы от них избавиться, просто закомментируйте эти строки, если подобные функции на сайте не нужны.
Как убрать страницу настройщика тем
Скрыть в меню WordPress ссылку на настройщик шаблона почему-то оказалось не так просто. В сети нашел несколько вариантов решения задачи, но ни один из них у меня не сработал. Единственное, что помогло — метод с CSS.
add_action('admin_head', 'hide_customize');
function hide_customize(){
echo '.hide-if-no-customize{display:none;}';
}
Данный код размещаете в файле функций. Он добавляет display:none; для стиля, который используется в пункте настройщика (hide-if-no-customize). Возможно, в какой-то версии системы там будет другой class/id, смотрите код страницы.
Убираем меню в WordPress для конкретного пользователя
Допустим вы хотите сделать отдельные настройки для какого-то конкретного редактора, убрав лишнее. Задавать параметры всем пользователей с одним и тем же типом прав доступа в этом случае не вариант. Вам пригодится ограничение по email (т.к. значение почты уникально для каждого юзера).
add_action('admin_menu', 'remove_admin_menu_links', 999);
function remove_admin_menu_links() {
$user = wp_get_current_user();
if ( $user && isset($user->user_email) ) {
if (('yourmail1@gmail.com' == $user->user_email) || ('yourmail2@gmail.com' == $user->user_email)) {
remove_menu_page('tools.php');
remove_menu_page('users.php');
remove_menu_page('wpcf7');
remove_menu_page('options-framework');
}
}
}
В данном случае условие срабатывает для двух профилей с почтой yourmail1@gmail.com и yourmail2@gmail.com. Важно(!) Не забудьте поменять эти значения на свои.
Как удалить меню в WP по ролям
У каждой роли пользователей в WordPress (админ, автор, редактор) есть определенные возможности: правка готовых постов, удаление чужих записей и т.п. С помощью функции current_user_can и условного оператора вы можете реализовывать нужные задачи:
add_action( 'admin_menu', 'remove_some_menus', 999 );
function remove_some_menus() {
// 1. Добавляете строки скрытия пунктов меню для всех
if ( ! current_user_can('manage_options') ) {
// 2. Здесь будут вызовы для роли редактора и ниже (но не админа)
}
if ( ! current_user_can('delete_others_posts') ) {
// 3. Условие для авторов и ниже, но не редакторов и админов
}
}
Код размещаете в файле функций functions.php. Здесь проверяются условия с помощью current_user_can — может ли текущий юзер менять настройки или удалять посты. Например, последняя задача недоступна для роли Автор, поэтому будет выполнен соответствующий (третий) блок исключений (которые и получат все авторы).
Вот еще один сниппет. Дабы скрыть меню Инструменты из WordPress для всех, кто не является админом, используйте:
add_action( 'admin_init', 'remove_menu_nonadmin' );
function remove_menu_nonadmin () {
global $user_ID;
if ( !current_user_can('administrator') ) {
remove_menu_page('tools.php', 'tools.php');
}
}
Думаю, суть вы уловили.
Admin Menu Editor для модификации меню
Я хотел решить вопрос именно с помощью кода, но традиционно под нашу задачу есть и специальные плагины для WordPress админки. Один из них — Admin Menu Editor. Он позволяет:
- Редактировать заголовки, иконки, CSS для навигации в системе.
- Переставлять пункты местами с помощью перетаскивания, в том числе и меняя их иерархию.
- Показывать и скрывать меню в WordPress.
- Устанавливать разные разрешения доступа.
- Создавать новые разделы и подпункты.
В целом инструмент интересный, хотя в нем нужно будет разбираться. Я пытался «поиграться» там с ролями юзеров и скрытием определенных разделов, но если честно, у меня мало что получилось. Решил вернуться к обычным сниппетам. Возможно, в будущем рассмотрю его детальнее. Модуль весьма популярный — около 200 тысяч загрузок и высокие оценки.
Кстати, можете также оценить плагин WP Responsive Menu, который позволяет скрывать нужные элементы навигации для версии сайта под смартфоны/планшеты.