Standardmäßig werden bei WordPress auf jeder Seite die gleichen Menüs angezeigt. Im Backend kann man zwar beliebig viele Menüs erstellen, je nach Theme werden aber am Ende nur ein bis zwei angezeigt. Welche genau wo angezeigt werden, lässt sich unter Design/Menüs/Positionen verwalten einstellen. Was aber, wenn wir auf Seite A Menü1 und auf Seite B Menü2 anzeigen möchten? Das geht zwar nicht über den Admin-Bereich aber mit ein paar Zeilen Code ist das schnell erledigt.

Anzeige

Die Parameter von wp_nav_menu() filtern

Um das Problem lösen zu können, müssen wir erst einmal wissen, welche WordPress Funktion für die Anzeige des Menüs verantwortlich ist. Dazu suchen wir mal schnell in der Funktionsreferenz von WordPress nach „display menu“ (ist ja englisch) und finden die Funktion wp_nav_menu, die eine ganze Menge an Parametern hat. Schauen wir in unser Theme werden wir diese Funktion auch irgendwo normalerweise in der header.php finden. Hier nur mal der Vollständigkeit halber die Parameter aus der Funktionsreferenz kopiert:

Wir wollen uns nicht alle Parameter detailliert anschauen, nur einen davon, der für uns wichtig ist und zwar den Parameter menu, der als Wert das anzuzeigende Menü bekommt.

Bevor die Funktion wp_nav_menu() aufgerufen wird, verändern wir nun  für diejenigen Seiten, die ein anderes Menü bekommen sollen, den Parameter menu. Für diese Aufgabe hat WordPress die sogenannten Filter vorgesehen und speziell für die Funktion wp_nav_menu() den Filter wp_nav_menu_args. Was wir nun tun müssen ist, die functions.php unseres Child Themes wie folgt (oder so ähnlich) zu ergänzen:

Ich habe hier die Funktion change_wp_nav_menu_args definiert, die hier exemplarisch das Menü für die Seite mit der id 52 ändert. Anschließend habe ich einen entsprechenden Filter definiert. Das war es eigentlich schon.

Wer es noch etwas ausgefeilter haben möchte und nicht jedes Mal den Code anpassen möchte, wenn ein neuer Sonderfall hinzukommt, findet eine gute Lösung im Blog von Niklas Rother.

Anzeige