Benutzerdefinierte Felder zum Steuern des WordPress Nav Menu

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 13 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

WordPress 3.0 beinhaltet neben einigen anderen neuen Features ja auch die Menüs. Wenn man mit dem normalen Menü, das automatisch aus den Seiten generiert wird, kann man sich einfach unter dem Punkt Design/Menüs ein eigenes basteln und einen Ort zuweisen, wo es dann das normale Menü ersetzt.

Wer jetzt aber WordPress als CMS und Blog benutzt (wie ich) steht jetzt u.U. vor einem Problem: Wenn man den Blog betrachtet soll man in der Navigation die normalen Seiten sehen, aber wenn man dann eine Seite mit vielen Unterseiten auswählt wäre es schön, wenn in der Menüleiste die Unterpunkte stehen, und es nur einen Eintrag „Blog“ gibt, der einen wieder zurück auf die Hauptseite bringt



Praktischerweise bringt WordPress schon alles mit, was man braucht, diese Idee zu verwirklichen. Das sind auf der einen Seite natürlich die eingangs erwähnten Menüs, auf der anderen Seite kommen die Custom Fields ins Spiel. Sofern man es nicht ausgeblendet hat, findet man unter jedem Post und jeder Seite einen Editor in dem man diesem Eintrag Metadaten verpassen kann. Über diese Metadaten kann man mit einem kleinen Codeschnipsel dann das angezeigte Menü verändern.

Dieser Codeschnipsel an entweder in dem functions.php des Themes abgelegt werden, oder in einem Plugin.


//Filter the arguments for the wp_nav_menu_function to include a custom menu on pages.
function nr_2010_wp_nav_menu_args($args = '')
{
	if ( is_page() ) //custom menus only on sites
	{
		global $post;

		$menu_name = get_post_meta($post->ID, 'menu_name', true);

		if( !empty($menu_name) && is_nav_menu($menu_name) )
		{
			$args['menu'] = $menu_name;
		}
	}
	return $args;
}
add_filter( 'wp_nav_menu_args', 'nr_2010_wp_nav_menu_args' );

Diese Code setzt zunächst einen Filter auf wp_nav_menu_args, dies sind die Parameter der Funktion wp_nav_menu, die das Theme zum ausgeben des Menüs benutzt.

Sofern wir uns auf einer Seite befinden ( is_page()) wird das CustomField menu_name der aktuellen Seite ausgelesen. Wenn es nicht leer ist (also nicht existiert) und es ein Menü mit diesem Namen gibt, werden die Parameter des Aufrufs so modifiziert, das das passende Menü angezeigt wird.

Bleibt nur noch eins zu tun: Den Seiten die passenden Metadaten zu geben, und die entsprechenden Menüs zu erstellen. Der Menüeditor ist sehr intuitiv, er sollte niemanden vor ernsthafte Probleme stellen. Nur ein Hinweis dazu: Es wird nicht automatisch gespeichert 😉

In eigener Sache: Zunächst möchte ich Frank für seinen tollen Blog loben, wo ich schon manches mal beim Basteln genau die Information gefunden habe, die ich dringend brauchte. Dann möchte ich ihn natürlich auch danken, dass er mir die Möglichkeit geboten hat, hier einen Gastbeitrag zu veröffentlichen. Und als letztes will ich diesen Platz auch noch für ein bisschen Werbung nutzen: Auch ich habe einen Blog, wo ich ab und zu über WordPress schreibe, häufiger wird man dort aber etwas über C# oder andere Themen die mich interessieren finden. Ich würde mich freuen, wenn ihr mal vorbei schaut 😉

Gastbeitrag

Dieser Beitrag ist aus der Feder von Niklas Rother – niklas-rother.de und ist ein Beitrag zum Adventskalender auf wpengineer.com zum Thema WordPress.
Vielen Dank auch hier nochmal von meiner Seite an Niklas.

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.