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

14

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

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

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

DEV-джим
источник
Мне любопытно. Если вашим пользователям не нужен доступ ни к одному из пунктов меню администратора, зачем им вообще нужен доступ к панели инструментов?
Моралейда
Хотите знать, мотивы ... Вы хотите скрыть это для конкретных ролей / пользователей? Вы делаете пользовательское меню админ-панели (вверху)?
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' );
}

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

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

Chris_O
источник
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 (идеальный компаньон для Ожа)
  • Настройки администратора (я являюсь автором этого, и его основной целью является настройка многих областей интерфейса администратора)
brasofilo
источник
Если вы идете по этому пути, имеет смысл использовать 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 или что). Даже с использованием хуков, я думаю, в какой-то момент вы захотите поставить в очередь таблицу стилей администратора, чтобы очистить то, что осталось от стилей разметки меню.

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

mrwweb
источник
Я уверен, что он искал способ удалить меню для обычных пользователей, а не администраторов. :)
Кристина Купер
1
add_action( 'admin_menu', 'remove_admin_menus' );

function remove_admin_menus(){
    global $menu;
    $menu = array();
}
kakoma
источник
Этот ответ тоже очень удобен. Он короткий и работает как шарм, за исключением страниц меню, созданных плагинами. (что не должно быть проблемой, потому что они видны только администратору)
Чарльз
Действительно, это удобное решение, НО стоит сказать, что на самом деле он не заблокирует доступ к этим страницам администратора, он просто сделает их невидимыми в панели администратора. Конечно, это лучше, чем 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;

    }
}
romapad
источник