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


14

Мне нужно настроить панель администратора для моего пользователя. Итак, как мне удалить все меню администратора? Не удаляйте пункт меню, я имею в виду полностью удалить левую вертикальную строку меню, включив дизайн меню (например, css, background..etc). Я хочу, чтобы это стало пустым.

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

Благодарность


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

Хотите знать, мотивы ... Вы хотите скрыть это для конкретных ролей / пользователей? Вы делаете пользовательское меню админ-панели (вверху)?
— brasofilo

1
Да, я хотел бы настроить меню администратора. Не то, чтобы текущее админ-меню не было достаточно хорошим, оно просто слишком «чувствительное». На мой взгляд, не подходит для брендинга.
— Dev-Jim

Пожалуйста, проверьте мой предыдущий ответ здесь; wordpress.stackexchange.com/questions/136058/...
— numediaweb

Ответы:


16

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

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

//Remove top level admin menus
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' );
}


//Remove sub level admin menus
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' );
}

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

введите описание изображения здесь


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

Куда ты это положил?

Кто-нибудь заметил последние проекты с этого снимка экрана? ;)
— acSlater

5

Следуя примеру /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 плагина, которые я использую для этого:

  • Администрирование (скрытие больших фрагментов интерфейса WordPress, фильтрация по ролям)
  • Ozh 'Admin выпадающее меню (все меню администратора в горизонтальном выпадающем меню, управляемом CSS)
  • Admin Menus Fixed (идеальный компаньон для Ожа)
  • Настройки администратора (я являюсь автором этого, и его основной целью является настройка многих областей интерфейса администратора)

Если вы идете по этому пути, имеет смысл использовать wp_enqueue_script()с admin_enqueue_scriptкрючком.
— mrwweb

1
@mrwweb Даже когда это такая маленькая вставка? Вы считаете достойным?
— brasofilo

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

Я не люблю использовать JQuery, если у меня нет другого выбора. Что если посетители отключат JavaScript в своем браузере? Хотя, вряд ли это произойдет, но есть возможность там. В любом случае спасибо за совет.
— dev-jim

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

2

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

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


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

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

function remove_admin_menus(){
    global $menu;
    $menu = array();
}

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

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

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;

    }
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.