Как удалить всё админ-меню?

14 мая 2012 г., 20:38:07
Просмотры: 20.9K
Голосов: 14

Мне нужно настроить админ-панель для моего пользователя. Как удалить всё админ-меню? Не просто удалить пункты меню, а полностью убрать вертикальную панель меню слева, включая весь дизайн (CSS, фон и т.д.). Я хочу, чтобы там было пусто.

Я могу сделать это с помощью CSS-хака. Но предпочитаю использовать хук. Есть идеи?

Спасибо

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

Мне любопытно. Если вашим пользователям не нужен доступ ни к одному из пунктов меню админки, зачем им вообще доступ к консоли?

moraleida moraleida
15 мая 2012 г. 04:35:02

Интересно узнать мотивы... Вы хотите скрыть его для определенных ролей/пользователей? Создаете кастомное меню в Админ Баре (вверху)?

brasofilo brasofilo
15 мая 2012 г. 04:49:53

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

dev-jim dev-jim
15 мая 2012 г. 14:05:43

Пожалуйста, проверьте мой предыдущий ответ здесь; http://wordpress.stackexchange.com/questions/136058/how-to-remove-admin-menu-pages-inserted-by-plugins/160523#160523

numediaweb numediaweb
7 сент. 2014 г. 18:46:32
Все ответы на вопрос 5
2
16

Правильный хук для использования — admin_menu, после которого нужно создать функцию для удаления нужных меню. Следующие две функции удаляют все меню.

add_action( 'admin_menu', 'remove_admin_menus' );
add_action( 'admin_menu', 'remove_admin_submenus' );

// Удаление основных меню админки
function remove_admin_menus() {
    remove_menu_page( 'edit-comments.php' );       // Комментарии
    remove_menu_page( 'link-manager.php' );        // Ссылки
    remove_menu_page( 'tools.php' );               // Инструменты
    remove_menu_page( 'plugins.php' );             // Плагины
    remove_menu_page( 'users.php' );               // Пользователи
    remove_menu_page( 'options-general.php' );      // Настройки
    remove_menu_page( 'upload.php' );              // Медиафайлы
    remove_menu_page( 'edit.php' );                // Записи
    remove_menu_page( 'edit.php?post_type=page' ); // Страницы
    remove_menu_page( 'themes.php' );              // Внешний вид
}

// Удаление подменю админки
function remove_admin_submenus() {
    remove_submenu_page( 'themes.php', 'theme-editor.php' );               // Редактор тем
    remove_submenu_page( 'themes.php', 'themes.php' );                     // Темы
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );  // Метки
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=category' );  // Рубрики
    remove_submenu_page( 'edit.php', 'post-new.php' );                     // Добавить новую запись
    remove_submenu_page( 'themes.php', 'nav-menus.php' );                  // Меню
    remove_submenu_page( 'themes.php', 'widgets.php' );                    // Виджеты
    remove_submenu_page( 'themes.php', 'theme-editor.php' );               // Редактор тем (дублирование)
    remove_submenu_page( 'plugins.php', 'plugin-editor.php' );             // Редактор плагинов
    remove_submenu_page( 'plugins.php', 'plugin-install.php' );            // Установка плагинов
    remove_submenu_page( 'users.php', 'users.php' );                       // Все пользователи
    remove_submenu_page( 'users.php', 'user-new.php' );                    // Добавить пользователя
    remove_submenu_page( 'upload.php', 'media-new.php' );                  // Добавить медиафайл
    remove_submenu_page( 'options-general.php', 'options-writing.php' );   // Написание
    remove_submenu_page( 'options-general.php', 'options-discussion.php' );// Обсуждение
    remove_submenu_page( 'options-general.php', 'options-reading.php' );   // Чтение
    remove_submenu_page( 'options-general.php', 'options-discussion.php' );// Обсуждение (дублирование)
    remove_submenu_page( 'options-general.php', 'options-media.php' );     // Медиафайлы
    remove_submenu_page( 'options-general.php', 'options-privacy.php' );   // Конфиденциальность
    remove_submenu_page( 'options-general.php', 'options-permalinks.php' );// Постоянные ссылки
    remove_submenu_page( 'index.php', 'update-core.php' );                 // Обновления
}

Скриншот левого меню при использовании указанных выше двух функций:

Скриншот админки WordPress с удалёнными меню

15 мая 2012 г. 06:09:22
Комментарии

Я нашел другой способ, используя $GLOBALS['menu'] = array();. Передача null в массиве также сработает.

dev-jim dev-jim
15 мая 2012 г. 14:13:05

Куда вы это вставляете?

User User
17 июл. 2013 г. 17:22:50
6

Следуя примеру /wp-admin/admin-header.php -> /wp-admin/menu-header.php, нет хука для этого.

Решение заключается в подключении к хуку admin_head и добавлении CSS + jQuery:

add_action('admin_head', 'wpse_52099_script_enqueuer');
function wpse_52099_script_enqueuer(){
    if(!current_user_can('administrator')) {
        echo <<<HTML
        <style type="text/css">
        #wpcontent, #footer { margin-left: 0px; }
        </style>
        <script type="text/javascript">
        jQuery(document).ready( function($) {
            $('#adminmenuback, #adminmenuwrap').remove();
        });     
        </script>
HTML;
    }
}

[обновление]
Как следует из уточнения вопроса, где становится ясно, что мотивация заключается в брендировании админ-панели, вот 4 плагина, которые я использую для этого:

  • Adminimize (скрывает большие части интерфейса WordPress с фильтрацией по ролям)
  • Ozh' Admin Drop Down Menu (все меню админки в горизонтальном CSS-выпадающем меню)
  • Admin Menus Fixed (идеальное дополнение к Ozh's)
  • Admin Tweaks (я автор этого плагина, и его основная цель — кастомизация многих областей интерфейса админки)
15 мая 2012 г. 04:42:04
Комментарии

Если вы выберете этот путь, логичнее использовать wp_enqueue_script() с хуком admin_enqueue_script.

mrwweb mrwweb
15 мая 2012 г. 04:55:30

@mrwweb Даже если вставка такая маленькая? Считаете, что это оправдано?

brasofilo brasofilo
15 мая 2012 г. 05:01:37

Согласен. Небольшие вставки скриптов/стилей проще делать через admin_head.

chrisguitarguy chrisguitarguy
15 мая 2012 г. 06:18:32

Мне не нравится использовать jQuery, если у меня нет другого выбора. А что если посетители отключат JavaScript в браузере? Хотя это маловероятно, но такая возможность существует. В любом случае, спасибо за совет.

dev-jim dev-jim
15 мая 2012 г. 14:10:46

В моем примере это будет вопросом двойного удаления, также скрывая 2 div'а и в CSS.

brasofilo brasofilo
15 мая 2012 г. 15:06:13

Это прекрасно. Для полноты картины нам нужно убрать margin слева при уменьшении размера экрана. Поэтому в CSS части просто добавьте: .auto-fold #wpcontent, .auto-fold #wpfooter {margin-left: 0;}

Christine Cooper Christine Cooper
5 мая 2015 г. 18:40:10
Показать остальные 1 комментариев
1

Единственный удобный для хуков способ, который я знаю, — это использовать remove_menu_page() для каждого пункта меню. Даже в этом случае я не знаю, что произойдет с самой левой панелью (свернется ли она до 0px в ширину или что-то ещё). Даже при использовании хуков, я предполагаю, что в какой-то момент вам захочется подключить административную таблицу стилей, чтобы убрать оставшиеся стили разметки меню.

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

14 мая 2012 г. 21:40:48
Комментарии

Я уверен, он искал способ убрать меню для обычных пользователей, а не для администраторов. :)

Christine Cooper Christine Cooper
18 мар. 2015 г. 17:56:44
2
// Добавляем действие при загрузке админ-панели WordPress
add_action( 'admin_menu', 'remove_admin_menus' );

// Функция для удаления всех пунктов меню в админке
function remove_admin_menus(){
    // Получаем доступ к глобальному массиву меню
    global $menu;
    // Очищаем массив меню
    $menu = array();
}
16 апр. 2016 г. 07:13:21
Комментарии

Этот ответ тоже очень удобен. Он короткий и работает отлично, за исключением страниц меню, созданных плагинами. (что не должно быть проблемой, так как они видны только администратору)

Charles Charles
26 апр. 2018 г. 16:39:33

Действительно, это удобное решение, НО стоит отметить, что оно фактически не блокирует доступ к этим страницам админки, а только делает их невидимыми в админ-баре. Конечно, это лучше, чем CSS-решение для скрытия элементов, но все же не идеально с точки зрения безопасности: продвинутые пользователи все еще могут получить прямой доступ к страницам админки, редактируя URL.

Marcos Buarque Marcos Buarque
9 июн. 2018 г. 17:47:53
0

Я улучшаю решение от @brasofilo, так как в нём есть небольшая ошибка — при перезагрузке страницы с нестабильным интернет-соединением меню может ненадолго появиться. Чтобы избежать этого, я добавил немного больше CSS:

add_action('admin_head', 'wpse_52099_script_enqueuer');

function wpse_52099_script_enqueuer() {

    if(!current_user_can('administrator')) { 

echo <<<HTML
<style type="text/css">
#wpcontent, #footer { margin-left: 0px !important; }
#adminmenuback, #adminmenuwrap { display: none !important; }
</style>
<script type="text/javascript">
jQuery(document).ready( function($) {
    $('#adminmenuback, #adminmenuwrap').remove();
});
</script>
HTML;

    }
}
30 мая 2016 г. 22:29:02