Twenty Eleven: Home-Button umbenennen

Home-LinkDas Standard-WordPress-Theme Twenty Eleven zeigt unter dem Header-Bild eine Menüleiste an, und der erste Punkt darin ist als „Home“ beschriftet, auch in einer deutschen WP-Installation. Erstellt man im Backend ein Menü (unter Design > Menüs), kann man die Menüpunkte natürlich benennen, wie man möchte. Bleibt man jedoch bei der Standard-Navigation, wäre ein Text wie „Startseite“ passender.

Lösung

Zuerst sollte man sich ein Child-Theme anlegen, um Änderungen am Twenty-Eleven-Theme zu vermeiden. Bei Updates dieses Themes hat man sonst das Problem, dass man sich seine Änderungen überschreiben könnte oder diese aufwändig in die neue Version übertragen muss. Da sich die aktuelle Problemlösung auch direkt auf das Theme bezieht, ist sie in einem Child-Theme besser aufgehoben als in einem Plugin. Anleitung für Child-Themes: So kannst du das Theme Twenty Eleven an deine Bedürfnisse anpassen

Dann einfach in die functions.php des Child-Themes das hier einfügen:

/**
 * Get our wp_nav_menu() fallback, wp_page_menu(), to show a home link, but
 * with a custom text.
 * 
 * @param array $args The argument array.
 * @return array The modified arguments array.
 */
function abc_page_menu_args($args) {
  $args['show_home'] = 'Startseite';
  return $args;
}
add_filter('wp_page_menu_args', 'abc_page_menu_args', 11);

Getestet mit: WordPress 3.3 und Twenty Eleven 1.3

Dabei „abc“ durch ein Kürzel für euer Theme ersetzen, um Kollisionen mit den Funktionsnamen anderer Themes oder Plugins zu vermeiden. Der gewünschte Text wird in der Funktion einfach $args[’show_home‘] zugewiesen und fertig.

Startseiten-Link

Hintergrund

Mein erster Lösungsansatz war es, in der schon überschriebenen header.php den Menüaufruf anzupassen:

<?php wp_nav_menu( array( 'theme_location' => 'primary', 'show_home' => 'Startseite' ) ); ?>

Laut Codex kann man dort einen beliebigen Text angeben, der dann als Text des Home-Links benutzt wird. Die Funktion wp_nav_menu delegiert nämlich die Menüdarstellung an wp_page_menu, wenn kein eigenes Menü definiert wurde. Alle Parameter werden an wp_page_menu durchgereicht.

Das funktionierte leider nicht, da Twenty Eleven den Home-Text über einen Filter setzt anstatt direkt im Methodenaufruf. Die Lösung über die functions.php hat natürlich den Vorteil, auch ohne ein Überschreiben der header.php zu funktionieren. Es klappte allerdings erst, als ich add_filter noch den dritten Parameter mitgegeben habe. Die „11″ regelt die Reihenfolge, in der die Filter ausgeführt werden. Der Filter im Child-Theme muss natürlich als letztes laufen, sonst klappt das nicht. Ein remove_filter-Aufruf, wie es in der Doku zu Twenty Eleven vorgeschlagen wird, ist deshalb auch nicht nötig: Wenn die neue Funktion aufrufen wird, ist die Standard-Funktion des Parent-Themes schon gelaufen, was aber auch nichts macht. Wir überschreiben deren Ergebnis ja einfach wieder.

7 Gedanken zu „Twenty Eleven: Home-Button umbenennen

  1. Leider funktioniert diese Funktion bei mir nicht. Ich verwende WordPress 3.4.2 und die dabei mitgelieferte neueste Version von Twenty Eleven. Ich habe die Funktion in die functions.php des Child-Themes eingefügt und zwar als letzten Eintrag. Danach startet die so modifizierte Website überhaupt nicht mehr. Hat jemand ähnliche Erfahrungen gemacht und weiß evtl. Abhilfe? Vielen Dank für eine kurze Info.

    Viele Grüße
    Herbert

  2. Das funktioniert in meinem Test-Setup einwandfrei. Ich könnte mir höchstens vorstellen, dass Du in der functions.php das öffnende „<?php" vergessen hast!? Ansonsten klingt das nach einem PHP-Fehler. Der sollte sich in einem entsprechenden Logfile wiederfinden. Mit der genauen Fehlermeldung kann man dann den Fehler sicher korrigieren.

  3. Hallo,
    das öffnende „<?php" ist in meiner functions.php enthalten.
    Ich habe die beschriebene Funktion "function abc_page_menu_args" in die bisherige functions.php übernommen, und zwar als letzte Funktion. Diese neue functions.php habe ich in den Ordner des Child-Themes kopiert. Sollte die functions.php des Child-Themes evtl. nur Deine neue Funktion "function abc_page_menu_args" enthalten?
    Testweise habe ich auch die original functions.php, d.h. ohne Deine Funktion, in den Child-Theme Ordner kopiert. In diesem Fall startete die Website aber auch nicht mehr.
    Also, momentan bin ich noch etwas ratlos. Vielen Dank für weitere Hilfestellung

  4. Bin in Eile und kann es Dir gerade nicht genauer erklären, aber kopier auf jeden Fall nicht die functions.php des Parent-Themes ins Child-Theme. Das macht keinen Sinn und verursacht sicher einen PHP-Fehler, dessen Details Du bei Interesse im PHP-Errorlog auf dem Server nachlesen kannst. Lege lieber eine neue, leere Datei namens functions.php in den entsprechenden Ordner und kopiere dort nur das Öffnen des PHP-Bereiches sowie diese Funktion hinein.

    Es gibt viele Tutorials und Blog-Beiträge zum Thema Child-Theme, wo man sicher nachlesen kann, wie WordPress das intern handhabt. Ich tippe darauf, dass beide functions.php-Dateien eingebunden waren und deswegen die Funktionen alle doppelt vorhanden waren, was nicht geht in PHP.

Schreibe einen Kommentar

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

Bitte beachte die Kommentarregeln: 1) Kein Spam, und bitte höflich bleiben. 2) Ins Namensfeld gehört ein Name. Gerne ein Pseudonym, aber bitte keine Keywords. 3) Keine kommerziellen Links, außer es hat Bezug zum Beitrag. mehr Details...

So, noch mal kurz drüber schauen und dann nichts wie ab damit. Vielen Dank fürs Kommentieren! :-)