Wie entferne ich das gesamte Admin-Menü?

14

Ich muss das Admin-Panel für meinen Benutzer anpassen. Wie entferne ich das gesamte Admin-Menü? Nicht entfernen Sie den Menüpunkt, ich meine ganz entfernen Sie die linke vertikale Menüleiste, enthalten Sie das Design des Menüs (z. B. CSS, Hintergrund ... etc.). Ich möchte, dass es leer wird.

Ich kann es durch CSS-Hack tun. Aber ich bevorzuge es Hook zu tun. Irgendwelche Ideen?

Vielen Dank

Dev-Jim
quelle
Ich bin neugierig. Wenn Ihre Benutzer keinen Zugriff auf die Admin-Menüelemente benötigen, warum benötigen sie überhaupt Zugriff auf das Dashboard?
Moraleida
Fragen Sie sich nach den Motiven ... Möchten Sie diese für bestimmte Rollen / Benutzer ausblenden? Erstellen Sie ein benutzerdefiniertes Menü in der Admin-Leiste (oben)?
Brasofilo
1
Ja, ich möchte das Admin-Menü anpassen. Nicht, dass das aktuelle Admin-Menü nicht gut genug ist, es fühlt sich einfach zu "wordpress" an. Meiner Meinung nach nicht gut für das Branding.
Dev-Jim
Bitte überprüfen Sie meine vorherige Antwort hier; wordpress.stackexchange.com/questions/136058/…
numediaweb

Antworten:

16

Der richtige Hook ist admin_menuund erstellen Sie eine Funktion zum Entfernen der Menüs, die Sie entfernen möchten. Die folgenden 2 Funktionen entfernen alle Menüs.

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' );
}

Screenshot des linken Menüs mit den obigen 2 Funktionen:

Bildbeschreibung hier eingeben

Chris_O
quelle
3
Ich habe einen anderen Weg gefunden, indem ich $GLOBALS['menu'] = array();. Wenn Sie im Array null angeben, erledigt dies ebenfalls die Arbeit.
Dev-Jim
Wo legst du das hin?
Hat jemand die neuesten Entwürfe aus diesem Screenshot bemerkt? ;)
acSlater
5

Nach dem Vorbild von /wp-admin/admin-header.php-> /wp-admin/menu-header.phpgibt es keinen Haken dafür.

Eine Lösung besteht darin, admin_headCSS + jQuery einzubinden und auszuführen

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;
    }
}

[update]
Laut einer Klarstellung zu der Frage, wo klar wird, dass die Motivation das Branding des Admin-Bereichs ist, sind dies die 4 Plugins, die ich dafür benutze:

  • Verwalten (große Teile der WordPress-Oberfläche ausblenden, nach Rolle filtern)
  • Ozh 'Admin Dropdown-Menü (alles Admin-Menü in einem horizontalen CSS-gesteuerten Dropdown-Menü)
  • Admin-Menüs behoben (perfekter Begleiter für Ozhs)
  • Admin Tweaks (Ich bin der Autor dieses Themas und der Hauptzweck besteht darin, viele Bereiche der Admin-Oberfläche anzupassen.)
Brasofilo
quelle
Wenn Sie diese Route wählen, ist die Verwendung wp_enqueue_script()mit admin_enqueue_scripthook sinnvoller .
Mrwweb
1
@mrwweb Auch wenn es eine so kleine Einfügung ist? Findest du das würdig?
Brasofilo
Einverstanden. Kleinere Einfügungen in Skripte / Stile sind einfacher durchzuführen admin_head.
Chrisguitarguy
Ich benutze die jquery nicht gerne, es sei denn, ich habe keine andere Wahl. Was ist, wenn die Besucher das Javascript in ihrem Browser deaktivieren? Es ist zwar unwahrscheinlich, dass etwas passiert, aber es besteht die Möglichkeit, dass es passiert. Trotzdem danke für den Rat.
Dev-Jim
In meinem Beispiel handelt es sich um das doppelte Entfernen, indem auch die beiden Divs in CSS ausgeblendet werden.
Brasofilo
2

Die einzige Möglichkeit, die ich kenne, ist die Verwendung remove_menu_page()für jeden einzelnen Menüpunkt. Selbst dann weiß ich nicht, was mit dem linken Balken selbst passiert (ob er auf 0px Breite zusammenfallen würde oder was). Ich stelle mir vor, dass Sie trotz der Verwendung der Hooks irgendwann ein Admin-Stylesheet in die Warteschlange einreihen möchten, um die verbleibenden Menü-Markup-Stile zu bereinigen.

Ich wäre vorsichtig dabei. Wenn Sie beispielsweise "Einstellungen" entfernen, können keine Plugins erreicht werden, die Menüseiten im Menü "Einstellungen" erstellen. Im Allgemeinen frage ich mich, wie nachhaltig es wirklich ist, das Menü vollständig zu entfernen.

mrwweb
quelle
Ich bin sicher, er suchte nach einer Möglichkeit, das Menü für normale Benutzer zu entfernen, nicht für Administratoren. :)
Christine Cooper
1
add_action( 'admin_menu', 'remove_admin_menus' );

function remove_admin_menus(){
    global $menu;
    $menu = array();
}
Kakoma
quelle
Diese Antwort ist auch sehr praktisch. Es ist kurz und wirkt bis auf die von Plugins erstellten Menüseiten wie ein Zauber. (was kein Problem sein sollte, weil sie nur für einen Administrator sichtbar sind)
Charles
Es ist in der Tat eine einfache Lösung, ABER es ist anzumerken, dass der Zugriff auf diese Admin-Seiten nicht blockiert wird, sondern nur in der Admin-Leiste unsichtbar gemacht wird. Es ist natürlich besser als eine CSS-Lösung zum Ausblenden von Elementen, aber immer noch in Bezug auf die Sicherheit mangelhaft: Erfahrene Benutzer können durch Bearbeiten der URL immer noch direkten Zugriff auf Admin-Seiten erhalten.
Marcos Buarque
0

Ich verbessere die Lösung von @brasofilo, da es einen kleinen Fehler gibt. Ein erneutes Laden der Seite mit nicht der besten Internetverbindung wird für sehr kurze Zeit angezeigt. Um dies zu vermeiden, habe ich ein bisschen mehr CSS hinzugefügt:

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
quelle