Sidebar
ein-/ausblenden

Dynamisches Menü mit Hervorhebung unter WordPress

Plugin für WordPress SEO

Anzeige

Immer wieder kommen Fragen, wie man mit WordPress eine Navigation erstellt. Dabei liegt der Fokus oft auf statischen Seiten oder Kategorien.
Für beides möchte ich folgendem Beitrag eine Lösung zeigen und mit wenigen Worten erklären. Die Beispiele sind willkürlich gewählt und die Formatierung via CSS lässt sehr viel Spielraum und Kreativität offen. Darum soll es auch nicht primär gehen, sondern eher um die Möglichkeiten, die WordPress bietet, ohne dass man ein statische Navigation in das Theme baut, die nicht erweiterbar ist, in dem man eine neue Seite oder Kategorie anlegt.
Beides ist bei den folgenden Beispielen möglich und damit ist es den Herausgebern im Blog wesentlich leichter, zu entscheiden, ob sie eine neue Seite/Kategorie in die Navigation aufnehmen. Sie benötigen so keine Arbeit im Template des Themes.
Menu mit WordPress

Navigation mit Seiten

Das folgende dynamische „Highlightmenu“ funktioniert mit statischen Seiten aus der WordPress-Verwaltung. Daher die Abfrage der Seiten is_page(). Wenn die zutrift (TRUE), dann wird die Klasse current_page_item vergeben, worüber man den Listpunkt formatieren kann.

Handlet es sich nicht um eine statische Seite, dann wird der Weblog-Link mit der Klasse versehen und kann damit als Aktiv formatiert werden. Alternativ kann man auch einfacher abfragen: if ( !is_page() ). Um aber das Verständnis zu fördern, habe ich nochmal eine ganze Reihe von Conditional Tags aufgenommen und frage einfach auf TRUE ab.

Als letzten Listpunkt werden alle statischen Seiten, außer (exclude) die mit ID 6, 7, 9, 1234, ausgegeben. Daher wird also jede weitere Seite, die angelegt wird, direkt in das Menu geladen und bekommt die Klasse current_page_item, wenn sie aktiv ist.


<ul id="nav">
	<li<?php if ( is_home() || is_category() || is_archive() || is_search() || is_single() || is_date() ) { echo ' class="current"'; } ?>><a href="#">Weblog</a></li>
	<li<?php if ( is_page('impressum') ) { echo ' class="current_page_item"'; } ?>><a href="#">Impressum</a></li>
	<li<?php if ( is_page('kontakt') ) { echo ' class="current_page_item"'; } ?>><a href="#">Kontakt</a></li>
	<?php wp_list_pages('exclude=6,7,9,1234&sort_order=ASC&title_li='); ?>
</ul>

Horizontale Navigation der Kategorien

Eine ähnliche Navigation kann man auch mit Kategorien bauen, auch dort vergibt WordPress eine Klasse für die aktive Kategorie. Um dies genauer zu sehen, verweise ich auf meine Experimente-Box, in der ich schon mal ein entsprechendes Beispiel mir Erklärung hinterlegt habe.

Der nachfolgende Beispielsyntax gibt alle Kategorien aus und verhindert die Ausgabe eines Titels. Der Template Tag wp_list_categories() kann wesentlich mehr Parameter, dazu soll aber der Verweis auf die offizielle Dokumentation dienen. So kann man beispielsweise auch Kategorien ausschließen.


<ul id="csstabs">
	<?php wp_list_categories('title_li='); ?>
</ul>

Hinweise

WordPress vergibt für den aktiven Link die Klasse current-cat; damit kann der aktive Link formatiert werden.

Jede einzelne Kategorie kann ebenso formatiert werden; möchte man beispielsweise eine gesonderte Kategorie hervorheben. Dazu steht die Klasse cat-item-ID bereit, das ID ist mit der ID der Kategorie zu ersetzen. Diese erkennt man am einfachsten im Backend, in der Verwaltung der Kategorien, bei einem MouseOver.

Jeder erzeugter Link bekommt die Klasse cat-item, wodurch der Link einfach angesprochen werden kann.

Ausgabe

Ein entstandener Link sieht beispielsweise wie folgt aus:


<li class="cat-item cat-item-3">
	<a href="http://example.de/?cat=3" title="View all posts filed under Cat 2">cat ID 2</a>
</li>

Formatierung via CSS

Um ein horizontales Menu zu erzeugen, muss nun via CSS formatiert werden. Für das Beispiel, welches in der Demo gezeigt wird, nutze ich den folgenden Beispielsyntax.


	#csstabs {
	margin: 0;
	padding: 0 0 25px 10px;
	border-bottom: 1px solid #009900;
	}

	#csstabs li {
	margin: 0;
	padding: 0;
	display: inline;
	list-style-type: none;
	font-size: 1em;
	line-height: 1.2em;
	}

	#csstabs a:link,
	#csstabs a:visited {
	float: left;
	font-weight: 700;
	margin: 0 10px 4px 10px;
	border-bottom: 4px solid #fff;
	padding-bottom: 2px;
	text-decoration: none;
	color: #9c9;
	}

	#csstabs a.current-cat:link,
	#csstabs a.current-cat:visited,
	#csstabs a:hover {
	border-bottom: 4px solid #009900;
	padding-bottom: 2px;
	background: #fff;
	color: #009900;

19 Kommentare zu „Dynamisches Menü mit Hervorhebung unter WordPress“

  1. 1
    Kommentar von Latita

    Ist leider OT, aber ich hab eben, dass du deinen Feed um einen Zusatz erweitert hast "Danke für das Aboonieren meines Feeds". Diesen finde ich sehr freundlich =)

  2. 2
    Kommentar von Frank Bültge

    @Latita: dieses kleine DANKE ist schon sehr lange drin, danke der Rückmeldung!

  3. 3
    Kommentar von Latita

    Oh wei ^^ das ist ja fast schon peinlich. Es ist mir aber heute erst aufgefallen und musste gleich lächeln

  4. 4
    Kommentar von Marvin

    sehr guter artikel. ich muss sagen das ich danach schon gesucht habe! und wie immer findet man es bei bueltge ;)
    danke sehr!

  5. 5
    Kommentar von Bastian

    Ich überleg ja schon seit einiger zeit, in meinen Blog oben eine horizontale Navi zu machen. Es sollen einfach bestimmte Bereiche so besonderes Augenmerk bekommen, weil sie sich auch inhaltlich-konzeptionell abheben sollen. Weil ich mir vorstellen kann, dass es auch anderen so geht, dachte ich mir, schreib ich direkt mal ein Plug-In dafür. Dank bueltge.de hab ich jetzt schon mal erste Anhaltspunkte. Frank, magst du mir trotzdem helfen, wenn es soweit ist? :-)

  6. 6
    Kommentar von Frank Bültge

    @Bastian: Wenn die Zeit es zulässt, gern.

  7. 7
    Kommentar von Bastian

    Merci im Voraus! Keine Sorge, ich habe den Anspruch, dass möglichst alles selbst zu machen und auch nicht gleich beim ersten Problem hinzuwerfen.

  8. 8
    Kommentar von Hartmut Birkholz

    Cool! Danke! Funktioniert!
    Ich hatte Dich vor einiger Zeit (während Deines Urlaubes (ähem)) wegen dieser Frage angeschrieben.
    Ich bleibe mal bei den Seiten: Das exclude funktioniert leider nur solange, soweit es keine Subpages gibt, wenn ich nämlich eine Hauptseite mit Unterseiten ausschließe, werden knallhart nur die Subseiten angezeigt, was ja auch nicht gewollt ist.
    Ich hab noch keine Lösung gefunden, vielleicht hast Du eine?
    mfG Hartmut

  9. 9
    Kommentar von Hartmut Birkholz

    P.S. zu meinem letzten Kommentar
    Um Unterseiten von der Navigation auszuschließen:
    && $post->post_parent hinzufügen

  10. 10
    Kommentar von Jonas

    Danke für diesen tollen Beitrag!

  11. 11
    Kommentar von Melanie

    das ist ja wunderbar!:) Danke für diesen Beitrag, er wird mir eigentlich sehr nützlich sein. Tolle Seite, weiter so!

  12. 12
    Kommentar von Roman

    Mal wieder ein sehr schöner und hilfreicher Artikel. Immer wenn ich auf diese Seite stoße finde ich was ich suche.
    Nächstes Mal wenns um WordPress Themen geht suche ich gar nicht erst auf Google, sondern gleich hier ;)

    Gruß
    Roman

  13. 13
    Kommentar von Joe

    1-A Beitrag! Danke!!

  14. 14
    Kommentar von ghg

    wirklich nettes tutorial! sowas hab ich gesucht... allerdings würde ich das ganze gerne mit grafiken machen und weiß nicht so recht wie :(

    ich habe 3 seiten=3 grafiken im header:
    home,bilder,kontakt

    bei active soll bei jeder seite ein anderes bild sein..

  15. 15
    Kommentar von Tom

    Mal wieder ein sehr interessanter Artikel, vielen Dank!

  16. 16
    Kommentar von duckface

    Moin,

    Habe es auch mit grafiken gemacht, leider wird current auch nicht angezeigt..
    dachte hier find ich jetz die lösung mit dem current_page_item,
    the search goes on...

    aber vertikale navi ist gebookmarkt

  17. 17
    Kommentar von Felix

    Ok, nutze dieser version:
    <li>Impressum
    klappt auf den Unterseiten ganz gut nur wird die für die Startseite immer die .current gesetzt, da diese keinen Namen hat sondern einfach die das index.pho geladen wird. Wo kann ich der startseite einen Namen geben - wie z.B. bei der Unterseite 'kontakt' ?

    Mercie
    felix

  18. 18
    Kommentar von Frank Bültge

    @Felix: entweder einen statischen Link hinzufügen, oder die Startseite als Page anlegen und damit im Menu haben, diese Seite setzt du dann in den Einstellungen --> Lesen als Startseite.

  19. 19
    Kommentar von Norbert

    Hallo Frank,
    tolle Seite. Oft bin ich hier schon fündig geworden, wenn es um WordPress geht.
    Seit WP3.0 arbeite ich viel mit den Custom Post Types. Ein Problem konnte ich bis jetzt nicht bewältigen: die 'wp_list_pages(post_type=xyz)' liefert keine Klasse current_page_item / current o.ä. . Obige Lösung liefert kommt eben nur für die Hauptnavigation in Frage.
    Hättest du vielleicht eine Idee?
    Vielen Dank schonmal

Kommentar schreiben

Kommentarregeln: Bleib cool, kritisch ist in Ordnung, aber wenn du unhöflich bist, dann lösche ich deinen Kommentar. Bitte benutze deinen persönlichen Namen oder Initialen und nicht den Namen eines Unternehmens, dies würde als Spam gewertet und wird gelöscht. Der Zusammenhang zwischen Namen und URL sollte nicht offensichtlich auf Spam hindeuten! ♥ Ansonsten, vielen Dank für den Kommentar und viel Spaß mit meinem Blog.

Kommentar-Hilfe

händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.

Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.

xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>

Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als &lt; und > als &gt; einfügt.

E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.

Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.

Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.

Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.