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.

Bookmarken bei Diese Icons verlinken auf Bookmark Dienste bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • Digg
  • del.icio.us
  • Webnews
  • MisterWong
  • Y!GG
  • Google Bookmarks
  • SEOigg
  • Technorati
  • Alltagz
  • Linkarena

Informationen zum Blogartikel "Wordpress CMS - dynamisches Menu und Untermenu mit wp_list_pages"

Ähnliche Beiträge im Webdesign Blog

10 Antworten zu “Wordpress CMS - dynamisches Menu und Untermenu mit wp_list_pages”

  1. Internetagentur Köln sagt:

    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.

  2. Designstudio, Philipp Speck sagt:

    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!

  3. Nina Thamm sagt:

    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.

  4. hans sagt:

    fetter dank, geile sache …

  5. Jane sagt:

    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

  6. peter sagt:

    Echt super sache! Hat sofort funktioniert! Grüsse

  7. Patrick sagt:

    Das ist genau das, wonach ich nun schon eine ganze Weile gesucht habe. Auf den Punkt! Vielen Dank! :-)

  8. Chris (www.kletterfieber.net) sagt:

    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

  9. Chris (www.kletterfieber.net) sagt:

    Der Link fehlt:
    http://jahnforjahn.de/wordpress/

  10. Chris (www.kletterfieber.net) sagt:

    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.

Hinterlasse eine Antwort




Copyright flexib webcoding - Webdesign, Programmierung und SEO in Halle - Saalekreis - Leipzig
flexib webcoding is powered by WordPress | Beiträge (RSS) | Kommentare (RSS) | Impressum | AGB | Webdesign Blog Tags