Зачем удалять меню в админ-панели WordPress
В стандартной установке WordPress в админ-панели присутствует множество пунктов меню — «Записи», «Медиафайлы», «Страницы», «Комментарии», «Внешний вид», «Плагины», «Пользователи» и другие. Иногда возникает необходимость убрать все или часть этих пунктов. Например, если вы создаёте кастомное решение для клиента с ограниченным доступом, или хотите полностью контролировать интерфейс админки, предоставляя доступ только к нужным разделам.
Удаление меню помогает избежать случайных изменений, повысить безопасность и упростить интерфейс для пользователей с ограниченными правами. В этой статье мы подробно рассмотрим, как удалить все меню в админ-панели WordPress программно, какие есть нюансы и лучшие практики.
Как работают меню в админ-панели WordPress
Меню WordPress создаются с помощью глобального массива $menu, а подменю — через $submenu. Для удаления пунктов меню обычно используется хук admin_menu с функцией remove_menu_page(). Например:
remove_menu_page('edit.php'); // Удаляет пункт "Записи"Но чтобы удалить все меню, нужно пройтись по глобальному массиву и удалить каждый пункт. При этом важно делать это в нужном приоритете, чтобы изменения применились корректно.
Как удалить все меню в админ-панели WordPress: пошаговый пример
Рассмотрим практический пример функции wpclass_remove_all_menus(), которая удаляет абсолютно все пункты меню у пользователя с ролью, например, ниже администратора. Это позволит ограничить доступ к админке.
function wpclass_remove_all_menus() {
global $menu;
// Перебираем все пункты меню
foreach ($menu as $key => $value) {
// Ключ $value[2] содержит slug меню
remove_menu_page($value[2]);
}
}
add_action('admin_menu', 'wpclass_remove_all_menus', 999);Обратите внимание на приоритет 999 — это нужно, чтобы функция сработала после добавления всех пунктов меню. Без этого некоторые пункты могут остаться.
Добавление исключений для конкретных ролей
Если вы хотите, чтобы администраторам меню не убирались, а для других ролей — убирались, можно добавить проверку:
function wpclass_remove_all_menus() {
if (!current_user_can('administrator')) {
global $menu;
foreach ($menu as $key => $value) {
remove_menu_page($value[2]);
}
}
}
add_action('admin_menu', 'wpclass_remove_all_menus', 999);Так вы оставите меню для администраторов и скроете для остальных.
Как восстановить нужные пункты меню после удаления всех
Иногда нужно удалить все меню, но оставить пару важных. Например, оставить только пункт «Плагины» и «Пользователи». Для этого можно сделать так:
function wpclass_remove_all_menus_except_some() {
if (!current_user_can('administrator')) {
global $menu;
// Массив slug пунктов, которые нужно оставить
$exceptions = ['plugins.php', 'users.php'];
foreach ($menu as $key => $value) {
if (!in_array($value[2], $exceptions)) {
remove_menu_page($value[2]);
}
}
}
}
add_action('admin_menu', 'wpclass_remove_all_menus_except_some', 999);Таким образом, вы гибко управляете интерфейсом админки.
Проверка результатов и отладка
После добавления кода в файл functions.php вашей темы или в кастомный плагин, зайдите в админ-панель под тестовой учетной записью, чтобы убедиться, что меню скрыты как ожидается.
Если меню не скрываются, проверьте, не вызываются ли другие плагины, которые могут переписывать админ-панель. В таких случаях можно увеличить приоритет хука, например до 1000 или выше:
add_action('admin_menu', 'wpclass_remove_all_menus', 1000);Если вы хотите дополнительно скрыть пункты подменю, используйте remove_submenu_page() по аналогии.
Примеры полезных плагинов для управления меню в WordPress
Если вы не хотите писать код сами, есть проверенные плагины, которые позволяют гибко управлять меню в админке:
- Admin Menu Editor — очень популярный плагин, который позволяет визуально редактировать, скрывать, переименовывать пункты меню.
- User Role Editor — кроме ролей, позволяет менять права доступа к меню.
- White Label CMS — для полного ребрендинга и настройки панели администратора, включая меню.
Однако, если нужна максимальная кастомизация под конкретную задачу, программный подход с использованием описанных выше функций даст больше контроля и гибкости.