Wie verwende ein eigenes Menü pro Seite?

In meinem letzten Blogbeitrag habe ich euch gezeigt, wie ihr ein einfaches Seiten-Template für Landing Pages erstellen könnt. Darin habe ich auch erwähnt, dass ihr vielleicht für jede dieser Seiten ein eigenes Menü verwenden möchtet. In diesem Beitrag möchte ich euch zeigen, wie ihr das umsetzen könnt.

Erstellen eines Menüs für die Landing Page

Zuerst einmal müsst ihr ein eigenes Menü für die Landing Page erstellen. Das könnt ihr entweder im Customizer oder unter „Design ->Menüs“ im Backend tun. Hier verwendet ihr für den Namen des neuen Menüs am besten genau den gleichen Namen, den auch der Seitenname hat. Das macht es später einfacher, das neue Menü zu verwenden.

Überschreiben des Menüs mit einem eigenen Menü

Nachdem wir das neue Menü mit dem Seitennamen erstellt haben, können wir dieses neue Menü dynamisch laden. Jeder Menüeintrag wird in der Datenbank als nav_menu_item Post-Type gespeichert. Das eigentliche Menü wird als Term für die nav_menu Taxonomie gespeichert. Wenn WordPress nun versucht für eine Menü-Position ein Menü zu laden, dann wird eine Query auf diese Taxonomie verwendet. Genau hier können wir über einen Filter ansetzen um unser eigenes Menü zu bekommen. Hierzu könnt ihr folgenden Code verwenden:

function current_page_wp_get_nav_menu_object( $menu_obj, $menu ) {
	if ( $menu_obj instanceof WP_Term && 'primary' == $menu_obj->slug ) {
		$current_slug  = get_post_field( 'post_name', get_the_ID() );
		$page_menu_obj = get_term_by( 'slug', $current_slug, 'nav_menu' );

		if ( $page_menu_obj ) {
			$menu_obj = $page_menu_obj;
		}
	}

	return $menu_obj;
}
add_filter( 'wp_get_nav_menu_object', 'current_page_wp_get_nav_menu_object', 11, 2 );

In Zeile 2 prüfen wir erst einmal, ob wir uns an der richtigen Menü-Position befinden. Falls wir diesen Schritt vergessen würden, dann würden wir alle Menüs auf der Seite überschreiben. Also zum Beispiel aus eines im Footer, ein Social-Media-Menü usw. In diesem Fall prüfen wird, ob die Menü-Position primary, ist. Die Hauptmenü-Position könnte in eurem Theme aber einen anderen Namen haben.

Nach dieser Prüfung können wir dann den aktuellen Seitennamen verwenden und versuchen einen nav_menu Term mit diesem Namen zu finden. Wurde ein solcher gefunden, dann überschreiben wir das Original $menu_object mit unserem eigenen Seitenmemü.

Fazit

Das Überschreiben von Templates-Files ist wirklich einfach. Ein Menü an einer bestimmten Stelle dynamisch zu überschreiben ist nicht mehr ganz so einfach. Aber mit dem richtigen Filter ist auch das ohne Probleme möglich. Mit diesem kleinen Code-Schnipsel könnt ihr also nun eigene Menüs für das Landing Page Seitentemplate aus dem vorherigen Blogbeitrag erstellen. Wenn ihr stattdessen immer das gleiche Menü für alle Seiten verwenden möchtet, die dieses Landing Page Seiten-Template verwendet, dann könntet ihr innerhalb des Filters eben prüfen, ob dieses Template verwendet wird und dann entsprechend immer ein anderes Menü laden.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

2 Kommentare » Schreibe einen Kommentar

  1. Ich möchte dir sehr doll danken, dass Du nicht nur bloße Codeschnipsel hochlädst und mit Fachwörtern um dich schmeißt, sondern auch einfach Erklärungen dazu mitbringst.
    Wenn man grade neu mit WordPress beginnt, ohne Vorkenntnisse in HTML oder PHP o.ä. zu haben, ist sowas echt Gold wert, vielen Dank!

    • Hallo Johannes, danke für das Lob! Genau mit diesem Anspruch versuche ich meine Beiträge zu schreiben. Für Menschen ganz ohne Code-Kenntnisse sind sie aber nicht geeignet.

Schreibe einen Kommentar

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