Як видалити ціле меню адміністратора?


14

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

Я можу це зробити хакером css. Але я вважаю за краще використовувати гачок для цього. Будь-які ідеї?

Спасибі


Мені цікаво. Якщо вашим користувачам не потрібен доступ до жодного з пунктів меню адміністратора, навіщо їм взагалі потрібен доступ до інформаційної панелі?
moraleida

Замислюєтесь над мотивами ... Хочете приховати це для конкретних ролей / користувачів? Ви створюєте спеціальне меню панелі адміністратора (вгорі)?
brasofilo

1
Так, я хотів би налаштувати меню адміністратора. Не те, що поточне меню адміністратора недостатньо добре, це просто занадто "wordpress". На мій погляд, це не добре для брендингу.
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();. Надання нуля в масиві також зробить роботу.
dev-jim

Куди ти це поклав?

Хтось помітив нещодавні чернетки з цього знімка екрана? ;)
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 плагіни, які я використовую для цього:


Якщо йти по цьому шляху, то має сенс використовувати wp_enqueue_script()з admin_enqueue_scriptгаком.
mrwweb

1
@mrwweb Навіть коли це така маленька вставка? Ви вважаєте, що це гідно?
brasofilo

Домовились. Невеликі вставки сценарію / стилю простіше зробити admin_head.
chrisguitarguy

Мені не подобається використовувати jquery, якщо у мене немає іншого вибору. Що робити, якщо відвідувачі відключають JavaScript у своєму браузері? Хоча, ймовірно, це не відбудеться, але є можливість. Все одно дякую за пораду.
dev-jim

У моєму прикладі, це буде питання подвійного видалення, також заховавши 2 діви в 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.