Wordpress CMS - dynamisches Menu und Untermenu mit wp_list_pages
Vor einigen Tagen fragte ich mich, wie ich so einfach wie möglich ein Hauptmenu mit einem Untermenu in Wordpress einbauen kann. Es gibt dafür ein paar Navigations-Plugins wie zum Beispiel Navigo, aber irgendwie gibt es mit diesen nur Probleme. Dann habe ich etwas gegoogelt und herausgefunden, dass man so ein Menu doch Klassen mit der integrierten Wordpress Funktion wp_list_pages() erstellen kann.
Mit wp_list_pages() kann man statische Seiten ausgeben, nach bestimmten Kriterien. Hier erstmal ein Beispiel, wie ich so etwas in der Header.php von Wordpress integriert habe.
<ul>
<?php wp_list_pages(’sort_column=menu_order&title_li=&depth=1&exclude=26,27,28,29′ );?>
</ul>
<?php
if($post->post_parent) {
$submenu = wp_list_pages(’sort_column=menu_order&title_li=&child_of=’.$post->post_parent.’&echo=0′);
}
else {
$submenu = wp_list_pages(’sort_column=menu_order&title_li=&child_of=’.$post->ID.’&echo=0′);
}
if ($submenu) { ?>
<ul>
<?php echo $submenu; ?>
</ul>
<?php } ?>
Natürlich sollte man als erstes die Seiten anlegen. Bei einem Submenu für einen Hauptmenupunkt, muss man einfach eine übergeordnete Seite auswählen. Außerdem kann man auch eine Reihenfolge bei der Seitenerstellung angeben, wenn man das Menu nicht Alphabetisch ausgeben will.
Zum Quellcode:
In den ersten 3 Zeilen wird das Hauptmenu ausgelesen. Mit wp_list_pages(’sort_column=menu_order&title_li=&depth=1&exclude=26,27,28,29′ ) gebe ich hier ein das Hauptmenu nach der eingestellten Reihenfolge der Seiten(sort_column=menu_order) aus. Mit title_li kann man angeben, das Menu eine Überschrift haben soll(im Beispiel keine). Durch depth=1 erreichen man, dass nur Hauptseiten ausgegeben werden und keine untergeordneten Seiten. Außerdem kann man durch den Befehl exclude=26,27,28,29 bestimmte Seiten ausschließen. Dazu einfach die Id der statischen Blogseiten angeben.
Danach kommt der Code für das Submenu. Der Code ähnelt den des Hauptmenus jedoch müssen wir hier als erstes schauen, welche Hauptmenu-ID(Parent) die Seiten haben. Diese gibt Wordpress entweder mit $post->post_parent oder $post->ID aus, darum habe ich dort eine if-else-Anweisung eingebaut. Dann der wichtigste Tag in der Abfrage, mit child_of=… bestimmen wir, welche Untermenupunkte von welchen Hauptmenupunkt ausgegeben werden sollen. Durch echo=0 erreichen wir, dass es zu keiner Ausgabe kommt, sondern das Menu nur an die Varibale $submenu übergeben wird.
Schon haben wir ein dynamisch erstelltes Menu, um Wordpress wirklich als CMS nutzen zu können.
Einige andere Ausgabe-Beispiele:
wp_list_pages(’sort_column=post_date&show_date=created’)
-> Hier wird das Menu mit Haupt-und Submenu nach Erstellungsdatum und auch das Erstellungsdatum selber ausgegeben.
wp_list_pages(’sort_column=post_date&title_li=<h3>’ . __(’Pages’) . ‘</h3>’)
-> Ausgabe des Menus nach Erstellungsdatum und der Überschrift Seiten.
wp_list_pages(’sort_column=menu_order&title_li=&depth=1&include=26,27,28,29′ )
-> Um nur bestimmte Seiten im Menu anzuzeigen nutzt man einfach include und gibt dann die anzuzeigenden Seiten mit der ID an.
Ich hoffe diese Ausführung wird einigen weiterhelfen, bei mir klappt alles super und der Kunde freut sich auch. Man sollte im Übrigen beachten, dass dies alles erst am Wordpress 2.3.1 funktioniert, alles Wordpress immer updaten, um aktuell zu bleiben.
Informationen zum Blogartikel "Wordpress CMS - dynamisches Menu und Untermenu mit wp_list_pages"
- veröffentlicht am Mittwoch, 19. März 2008 um 01:32.
- Tags: blog, cms, menu, submenu, Wordpress, wordpress-funktion, wp_list_pages
- Blog-Kategorie: Wordpress
- Weiteres: RSS 2.0 | Antwort hinterlassen | Trackback










18. August 2008 um 11:14
Dürfte ich was brauchbares beisteuern? Ich hab diese Seite auf der Suche nach der passenden Lösung bezüglich Navigation und wp_list_pages gefunden. Mein Problem lag darin, dass ich aktuell dieses populäre Plugin nutze - “HeadSpace2″. Dabei kann die Seitenreihenfolge nicht angeklickt werden, ist wohl ein interner Fehler von dem Plugin. Mit Hilfe von wp_list_pages(’sort_column=post_date’) habe ich das einigermaßen gelöst.
10. Oktober 2008 um 19:35
Also, die oben beschriebene Navigation, ist die sauberste! Mit Navigo (www.adahas.com) war ich eigentlich sehr zufrieden, bis ich nach einer Möglichkeit suchte, die es mir erlaubt, Texte in mehreren Sprachen zu veröffentlichen. Ich entschied mich für Qtranslate (www.qianqin.de), da es mir sehr komfortabel erschien und der Programmierer selbstbewusst auf seiner Webseite wirbt: “Versuchen Sie doch ein anderers Plugin - Sie kommen sowieso auf mich zurück!” Da die Seitentitel nun auch in anderen Srachen existierten, entstand ein häßliches Kuddelmuddel in Navigo. Kurz: Navigo kommt mit Qtranslate nicht klar. Dieser Code hier schon! Wer im Header schon eine horizontale Navigation hat, kann die erste Zeile des PHP-Codes weglassen. Vielen Dank an den Autor!
22. Oktober 2009 um 10:59
Das klappt hervorragend, vielen Dank für die Veröffentlichung. Bei mir funktioniert der Einsatz direkt, ohne die Variable $submenu überhaupt nutzen zu müssen. Ich habe lediglich depth=3 eingetragen.
07. März 2010 um 00:09
fetter dank, geile sache …
11. Februar 2011 um 20:01
Funktioniert, vielen Dank! Geschickt wäre aber auch noch, wenn die Subnavigation direkt innerhalb von der Liste der Hauptnavi platziert wäre.
PARENT NAVI
CHILD
25. März 2011 um 03:02
Echt super sache! Hat sofort funktioniert! Grüsse
24. Mai 2011 um 06:55
Das ist genau das, wonach ich nun schon eine ganze Weile gesucht habe. Auf den Punkt! Vielen Dank!
04. Januar 2012 um 09:50
Hi,
Ich baue gerade für die Webseite meiner Schwester ein Theme zusammen. Mit dem Menü hatte ich bisher so meine Schwierigkeiten, weil Sie das Submenü an einer anderen Stelle haben möchte, als das Hauptmenü. Dein Artikel hat mir schon ganz gut geholfen. Aber eine Sache fehlt noch:
Wenn ich in einer page des Submenü´s bin, dann wird dieses wieder ausgeblendet. Aber da es weitere Pages gibt, möchte ich, dass sie dann auch angezeigt werde. Was muss ich zum Subemnü-Teil hinzufügen, damit es eingeblendet belibt, wenn ich mich dort befinde?
Hier könnt ihr es euch anschauen. Unter dem Menüpunkt “Kollektion” sind Subemnüs, die dann in dem nächsten Quadrat angezeigt werden sollen. Aber klickt man auf einen der Punkte verschwindet das ganze Submenü wieder.
Danke für einen Tipp, Chris
04. Januar 2012 um 09:51
Der Link fehlt:
http://jahnforjahn.de/wordpress/
04. Januar 2012 um 10:52
Ok, wer lesen kann ist klar im Vorteil. Ich habe ein bisschen zu viel selbst machen wollen
Jetzt habe ich nochmal geschaut und es auch hinbekommen.