Wenn es nur darum geht, bestimmte Menüpunkte trotz vorhanderen Benutzerrechte auszublenden, ist weiterhin das (inzwischen etwas angestaubte, aber funktionierende) Plugin Adminimize empfehlenswert.
Mit Plugins wie UserRoleEditor kannst du vorhandenen Benutezrrollen Rechte verweigern oder die Rechte ergänzen. Für das Verständnis ist aber wichtig, dass viele Plugins z.B. abfragen, ob ein Benutzer Plugins installieren oder Optionen ändern kann, weil dann davon auszugehen ist, dass es sich um eine/n Administrator/-in handelt.
Im Plugin-Developer-Handbook findest du dazu ein Kapitel, das unter anderem beschreibt, wie du mit add_cap()
einer Gruppe Benutzerrechte zufügst und mit remove_cap()
wieder entziehst. (Diese Änderungen haben übrigens auch dann noch Bestand, wenn das Plugin gelöscht wird!)
Mit der Funktion current_user_can()
kannst du abfragen, ob ein Benutzer bestimmte Rechte besitzt. Die Dokumentation enthält dafür ein hübsches Code-Beispiel:
if ( ! current_user_can( 'manage_options' ) ) {
add_filter( 'show_admin_bar', '__return_false' );
}
Wenn der aktuell angemeldete Benutzer also nicht das Benutzerrecht manage_options
hat, wird dem Filter show_admin_bar
der Wert false
zurückgegeben und die Admin-Leiste wird nicht angezeigt. Das lässt sich für die Backend-Menüeinträge entsprechend abändern.
Mit
function wpdocs_remove_menus(){
remove_menu_page( 'index.php' ); //Dashboard
remove_menu_page( 'jetpack' ); //Jetpack*
remove_menu_page( 'edit.php' ); //Posts
remove_menu_page( 'upload.php' ); //Media
remove_menu_page( 'edit.php?post_type=page' ); //Pages
remove_menu_page( 'edit-comments.php' ); //Comments
remove_menu_page( 'themes.php' ); //Appearance
remove_menu_page( 'plugins.php' ); //Plugins
remove_menu_page( 'users.php' ); //Users
remove_menu_page( 'tools.php' ); //Tools
remove_menu_page( 'options-general.php' ); //Settings
}
add_action( 'admin_menu', 'wpdocs_remove_menus' );
werden alle möglichen Menüs ausgeblendet (der Kommentar am Zeilenende gibt an, um was es sich handelt). Quelle: https://developer.wordpress.org/reference/functions/remove_menu_page/#comment-1308
Verschachtel man das nun in eine Abfrage mit current_user_can()
, lässt sich das auf bestimmte Benutzer begrenzen:
if ( ! current_user_can( 'manage_options' ) ) {
add_action( 'admin_menu', 'wpdocs_remove_menus' );
}
Welche Benutzer nun welche Benutzerrechte zugewiesen bekommen und damit welcher Benutzergruppe zugehören, kannst du hier nachlesen:
Roles and Capabilities
Ergänzend noch ein Hinweis: Viele Benutzer/-innen lernen WordPress anhand von Büchern oder Online-Tutorials und sind darauf angewiesen, Menüeinträge so vorzufinden, wie sie in Büchern und Tutorials dargestellt werden. Es gibt häufig Fälle, bei denen Web-Entwicklern ihren Kunden Rechte entziehen, um das Backend aufgeräumter wirken zu lassen und Kunden vor unbedachten Änderungen zu schützen.
Nicht selten landen diese Kunden dann hier, weil sie nicht verstehen, wieso sie als Administrator/-in viele Dinge in ihrer Website „nicht machen dürfen“. Besser wäre es, Kunden für diese Fälle in einem verschlossenen Umschlag Zugangsdaten zu einem Super-Administrator mit allen Benutzerrechten zu überlassen und darauf hinzuweisen, dass mit Öffnen des Umschlags die Gewährleistung erlischt.