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.

 

Smalltalk-Ecke

Hat Dir der Artikel gefallen oder möchtest Du am Inhalt etwas ergänzen? Hast Du weitere Fragen dazu? Lass uns gerne dazu austauschen. Ich freue mich von Dir zu hören! :)


  1. Alvaro sagt:

    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?

    1. Daniele sagt:

      Hallo Alvaro,

      versuch dafür mal folgendes:

      remove_submenu_page( 'edit.php?post_type=page', 'post-new.php?post_type=page' );
      
  2. Tom sagt:

    Sehr cool hat uns weitergeholfen 😉

    1. Daniele sagt:

      Vielen Dank! 😉

  3. morton sagt:

    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…

    1. Daniele sagt:

      Werden irgendwelche PHP-Fehler angezeigt, die Du mir mitteilen könntest?

  4. David sagt:

    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?

    1. Daniele sagt:

      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!

  5. David sagt:

    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.

    1. Daniele sagt:

      Hallo David,

      da stimme ich Dir im Grunde vollkommen zu, diesen Punkt sollte ich in meinem Beitrag noch ergänzen!

      Beste Grüße,
      Daniele

  6. Velli sagt:

    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?

    1. Daniele sagt:

      Hallo Velli,

      wenn Du Menüs lediglich für Nicht-Admins ausblenden möchtest, muss eine simple Abfrage dazu:

      <?php
      function dd_remove_menus(){
        
        if ( !current_user_can('manage_options') ) {
          remove_menu_page( 'index.php' );                  //Dashboard
        }
      
      }
      add_action( 'admin_menu', 'dd_remove_menus' );
      ?>

      Weitere Möglichkeiten zur Abfrage der User-Roles kannst Du hier nachschlagen.

      Viele Grüße!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Werde Teil unserer Community

Abonniere unseren kostenlosen Newsletter und wir informieren Dich regelmäßig über neue, spannende Artikel im Bereich Webentwicklung, die Programmierung von Mobile Apps, SEO und mehr!

Wir halten deine Daten privat und teilen sie nur mit Dritten, die diesen Dienst ermöglichen. Lies unsere Datenschutzerklärung.
Kostenloser Newsletter

Bleibe auf dem Laufenden!

Wir informieren Dich regelmäßig über neue, spannende Artikel im Bereich Webentwicklung, Programmierung von Mobile Apps, SEO und mehr!

Wir halten deine Daten privat und teilen sie nur mit Dritten, die diesen Dienst ermöglichen. Lies unsere Datenschutzerklärung.