Gerade für Kundenprojekte ist es durchaus sinnvoll, das WordPress-Backend individuell zu gestalten, nicht benötigte Menüelemente zu entfernen und das Wording anderer projektbezogen anzupassen. In diesem Artikel möchte ich Dir eine klare Anleitung geben, wie die Anpassung des Backends ganz ohne Plugin zu realisieren ist.
Vorbereitung
Die Website, die Du für Deinen Kunden erstellt hast, ist soweit fertig. Bevor es an die Optimierung des Backends geht, möchte ich Dir zwei Möglichkeiten der Realisierung zeigen.
1. Optimierung über das Theme
Du optimierst das Backend über das Theme selbst. In diesem Fall wird jeglicher Code in die Datei functions.php geschrieben, die sich im Root (Hauptordner) Deines Themes befinden sollte.
2. Optimierung über ein eigenes Plugin
Du erstellst Dir für die Backend-Optimierungen ein eigenes Plugin. Der Vorteil bei dieser Methode ist, dass es dann im Grunde nichts mehr mit dem verwendeten Theme zu tun hat und Du dieses global für weitere Installationen mit eventuell anderen Themes verwenden kannst. Bei dieser Methode sollte man den Code so global wie möglich halten.
Für diese Anleitung wähle ich die erste Methode, da das Erstellen eines eigenen Plugins nochmal eine andere Baustelle ist, über die ich demnächst einen eigenen Artikel schreiben und hier verlinken werde.
Jetzt wird optimiert!
Öffne nun die Datei functions.php, wie oben erwähnt sollte sie sich im Root Deines verwendeten Themes befinden. (wp-content/themes/theme-name/functions.php). Die Codezeilen, die nun dazukommen, fügst Du am besten ganz unten in der Datei ein.
Verbergen von nicht benötigten Menüpunkten
Zunächst möchten wir Menüs oder Untermenüs verbergen, die ohnehin nur dazu da sind, um den ahnungslosen Kunden zu verwirren. Damit soll gesagt sein, dass – je nach Website – einzelne Menüpunkte vielleicht überlüssig sind und nicht benötigt werden. Für dieses Vorhaben verwendet WordPress die Funktion remove_menu_page().
<?php function dd_remove_menus(){ remove_menu_page( 'index.php' ); //Dashboard 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', 'dd_remove_menus' ); ?>
In den Kommentaren kann man gut erkennen, welche Menüs mit den entsprechenden Codezeilen entfernt werden. Wichtig zu wissen ist, dass diese lediglich im Menü versteckt werden und mit einer manuellen Eingabe in der Adresszeile des Browsers trotzdem aufrufbar sind.
Das Verstecken der Untermenüs ist nicht viel schwieriger. Dafür ist die Funktion remove_submenu_page() verantwortlich.
<?php add_action( 'admin_menu', 'dd_adjust_the_wp_menu', 999 ); function dd_adjust_the_wp_menu() { $page = remove_submenu_page( 'themes.php', 'widgets.php' ); } ?>
Der erste Parameter (themes.php) bestimmt den Hauptmenüpunkt, in dem Fall „Design“ bzw. „Appearance“, der zweite Parameter (widgets.php) spricht das Untermenü an. In diesem Beispiel haben wir also das Untermenü „Widgets“ von der Menünavigation entfernt.
Einzelne Menüpunkte umbenennen
Manchmal ist es auch hilfreich, das Wording von bestimmten Menüelementen projektbezogen anzupassen. Dieses Vorhaben ist ebenfalls ziemlich simpel, wenn auch etwas umständlicher als das Entfernen.
<?php function dd_rename_post_menu() { global $menu; $menu[5][0] = 'Rezepte'; // Änderung von "Beiträge" in "Rezepte" } add_action( 'admin_menu', 'dd_rename_post_menu' ); ?>
In diesem Fall habe ich den Menüpunkt „Beiträge“ in „Rezepte“ umbenannt. Dafür verwende ich die globale Variable $menu. Das [5][0] steht für eine bestimmte Position im Array, welches Du Dir wie folgt ausgeben kannst, um zu ermitteln, mit welcher Position Du welchen Menüpunkt ansprechen kannst. Trage dafür unter der Zeile „global $menu;“ folgendes ein:
$menu_array = json_encode($menu); print_r($menu_array);
Danach solltest Du in Deinem Backend den kompletten Array sehen. Nicht erschrecken! 😉 Dort kannst Du zum Beispiel folgende Positionen feststellen:
- [2] = Dashboard
- [5] = Beiträge
- [25] = Kommentare
- [65] = Plugins
- und so weiter…
Nach Fertigstellung kannst Du die zwei Zeilen mit gutem Gewissen nochmal entfernen.
Den Login-Bereich anpassen
Dazu habe ich in diesem Artikel bereits einiges erzählt.
Individuelles Styling des Backends
Richtig gelesen! Du hast die Möglichkeit, eine separate CSS-Datei in Dein Backend zu laden und dementsprechend das Design individuell anzupassen. Deine CSS-Datei lädst Du wie folgt in Dein Backend:
<?php add_action('admin_head', 'dd_load_admin_styles'); function dd_load_admin_styles() { wp_enqueue_style( 'admin_css', get_template_directory_uri() . '/css/admin.css'); } ?>
Nun kannst Du mit Deiner eingebundenen CSS-Datei jedes Element ansprechen, welches Du im Backend gerne anpassen würdest.
Nicht benötigte Widgets entfernen
Manchmal gibt es von WordPress mitgelieferte Standardwidgets, die wir nicht benötigen. Mit diesen Codezeilen hast Du die Möglichkeit, einzelne zu deaktivieren:
<?php add_action('widgets_init', 'dd_remove_default_wigets'); function dd_remove_default_wigets() { unregister_widget('WP_Widget_Pages'); unregister_widget('WP_Widget_Calendar'); unregister_widget('WP_Widget_Archives'); unregister_widget('WP_Widget_Links'); unregister_widget('WP_Widget_Meta'); unregister_widget('WP_Widget_Search'); unregister_widget('WP_Widget_Text'); unregister_widget('WP_Widget_Categories'); unregister_widget('WP_Widget_Recent_Posts'); unregister_widget('WP_Widget_Recent_Comments'); unregister_widget('WP_Widget_RSS'); unregister_widget('WP_Widget_Tag_Cloud'); unregister_widget('WP_Nav_Menu_Widget'); } ?>
In diesem Beispiel habe ich alle Standardwidgets entfernt. Die Bezeichnung im Parameter sollte erklären, welche Zeile für welches Widget zuständig ist. Über die Funktion unregister_widget() kannst Du hier mehr lesen.
Fazit
Nach dem Umsetzen dieser Beispiele sollte das Backend für Deinen Kunden schon weit aufgeräumter und übersichtlicher sein. Du würdest gerne etwas anpassen, was Du in meinem Artikel nicht findest? Schreibe mir dazu gerne was in den Kommentaren und ich passe den Beitrag nach und nach an.
Viel Spaß beim Optimieren Deiner WordPress-Seiten!
Zusatz
Es ist prinzipiell sinvoller, das Backend lediglich für Nicht-Admins anzupassen. Abhilfe schafft hier folgende Abfrage:
<?php function dd_remove_menus(){ if ( !current_user_can('manage_options') ) { remove_menu_page( 'index.php' ); //Dashboard } } add_action( 'admin_menu', 'dd_remove_menus' ); ?>
In diesem Beispiel wurde der Menüpunkt „Dashboard“ für alle Nicht-Administratoren entfernt. Über die Möglichkeiten der Abfragen kannst Du hier mehr lesen.
Hallo Daniele,
ein super Artikel, den ich voll umgesetzt habe.
Ein Frage habe, wenn ich ein Untermenü ausblenden will. Ich habe versucht unter „Seiten“ den „Erstellen“ Link auszublenden: ../wp-admin/post-new.php?post_type=page
Ich habe es nicht geschafft. Hat sich etwas geändert?
Hallo Alvaro,
versuch dafür mal folgendes:
Sehr cool hat uns weitergeholfen 😉
Vielen Dank! 😉
Ich finde deine Lösung sehr schön und wollte sie implementieren, dass scheint aber mit WP 4.7.5. nicht zu funktionieren. Nach der Anpassung lässt sich die Seite nicht mehr Laden…
Werden irgendwelche PHP-Fehler angezeigt, die Du mir mitteilen könntest?
Ah und eine kurze Frage aus reiner Neugierde: Deine Funktion dd_load_admin_styles() ist da die Abfrage is_admin() nicht eigentlich überflüssig? Da der admin_head Hook doch eigentlich nur im Admin (wp-admin/admin-header.php) ausgeführt wird, oder?
Auch hier hast Du natürlich Recht. Die Abfrage is_admin() könnte man aufgrund der Hook genauso gut weglassen. Das Detail ist mir nicht aufgefallen, vielen Dank!
Danke für den interessanten Beitrag 🙂
Es hängt halt vom Kunden ab, ob man das so machen sollte oder nicht. Erfahrene WP Kunden wird das ein wenig verwundern, andere genau umgekehrt wird es wundern, was denn der Menüpunkt XYZ da macht und dann funktioniert der irgendwie auch nicht, da muss dann etwas kaputt sein etc.
Wenn man mit dem Kunden eine längerfristige Zusammenarbeit vereinbart, würde ich ihm nicht den Admin-Zugang geben, sondern über das Rollensystem gehen und daraufhin die Menüpunkte, die noch weg müssen, entfernen.
Ich weiß nicht, aber einfach aus dem Gefühl heraus, der Admin soll der Admin sein – komplette Kontrolle, alles sichtbar, der soll sich auskennen und wissen was er tut. Beschränkungen würde ich erst auf untergeordneten Rollen einsetzen.
Hallo David,
da stimme ich Dir im Grunde vollkommen zu, diesen Punkt sollte ich in meinem Beitrag noch ergänzen!
Beste Grüße,
Daniele
Damit werden aber komplett die Menüs für alle Admins ausgeblendet, oder nicht?
Wie würde das für die Rollen von z.B. Redakteuren aussehen?
Hallo Velli,
wenn Du Menüs lediglich für Nicht-Admins ausblenden möchtest, muss eine simple Abfrage dazu:
Weitere Möglichkeiten zur Abfrage der User-Roles kannst Du hier nachschlagen.
Viele Grüße!