Sidebar
ein-/ausblenden

Statische Links zu WordPress Seiten hinzufügen

Plugin für WordPress SEO

Anzeige

Nicht selten werden die Menus auf Blogs, welche mit WordPress arbeiten, mit statischen Links erstellt. Das mag anfangs einfacher erscheinen und weniger Mühe machen, aber bei Veränderungen oder Pflege durch User, die keine Kenntnis oder Zugriffe auf die Templates haben, ist es aufwändig, fehleranfällig und umständlich. Daher bietet es sich an, lieber die nötigen Template Tags zu nutzen und mit Hilfe der Parameter die nicht erwünschte (exclude) oder erwünschten (include) Seiten zu laden. Zusätzlich kann man Inhalte hinzufügen via Hook, was ich hier mal kurz erklären will.

So wie sehr viele Funktionen von WordPress, so lässt auch wp_list_pages() den Eingriff per Filter Hook zu. Die Funktion selbst hat eine ausführliche Beschreibung im Codex.


$output = apply_filters('wp_list_pages', $output);

Diesen machen wir uns zunutze und erweitern den Inhalt um zwei Beispiellinks, die man sonst im Theme händisch ergänzen müsste. Dazu legen wir den folgenden Code-Schnipsel in die functions.php des Themes. Die Tags müssen mit übergeben werden, da der Hook nach der Ausgabe der Liste integriert ist.


if ( !function_exists('fb_add_page_link') ) {
	function fb_add_page_link($output) {
		$output .= '<li><a href="http://example.com/1/">Example 1</a></li>';
		$output .= '<li><a href="http://example.com/2/"><span>Example</span> 2</a></li>';
	
		return $output;
	}
	
	add_filter('wp_list_pages', 'fb_add_page_link');
}

Nun wird die Ausgabe erweitert um die beiden Beispiellinks. Der folgenden HTML-Syntax soll es verdeutlichen.


<li class="pagenav">
	<h3>Seiten</h3>
	<ul>
		<li class="page_item page-item-2"><a href="http://example.com/?page_id=2" title="About">About</a></li>
		<li class="page_item page-item-64"><a href="http://example.com/?page_id=64" title="Default Form">Default Form</a></li>
		<li class="page_item page-item-40"><a href="http://example.com/?page_id=40" title="Offerings">Offerings</a></li>
		<li class="page_item page-item-12"><a href="http://example.com/?page_id=12" title="Page 2">Page 2</a>
			<ul>
				<li class="page_item page-item-14"><a href="http://example.com/?page_id=14" title="Subpage">Subpage</a>
					<ul>
						<li class="page_item page-item-45"><a href="http://example.com/?page_id=45" title="Subsubpage">Subsubpage</a></li>
					</ul>
				</li>
			</ul>
		</li>
		<li class="page_item page-item-16"><a href="http://example.com/?page_id=16" title="Page 3">Page 3</a></li>
	</ul>
</li>

<li><a href="http://example.com/1/">Example 1</a></li>
<li><a href="http://example.com/2/"><span>Example</span> 2</a></li>

Aufpassen, diese Links werden nach Prüfen der Parameter hinzugefügt und sind damit nicht mehr mit Hilfe der Parameter zu entfernen. Setzt man den Template Tag wp_list_pages() also mehrfach mit unterschiedlicher Ausgabe ein, so ist bei allen Ausgaben die Erweiterung dabei. Unterschiede lassen sich dann nicht ohne weiteres gestalten. Auch nicht mit dem zweiten Template Tag für Pages wp_page_menu(). Dieser Template Tag zieht die Inhalte aus aus der Funktion wp_list_pages()!

Als Hinweis sei noch gesagt, dass man den Template Tag wp_page_menu() erst seit WordPress Version 2.7 einsetzen kann. Dieser Tag kann im Grunde nicht viel mehr außer das automatische Hinzufügen eines Home-Link und die Steuerung der Ausgabe (echo), mehr in Beschreibung oder bei Monikas Artikel. Aber die Funktion unterscheidet sich noch in zwei weiteren Fällen und so kann man an zwei Punkten via Filter Hook einhaken und modifizieren.
Zum einen kann man die Argumente erweitern ...


$args = apply_filters( 'wp_page_menu_args', $args );

... und zum anderen das Menu erweitern.


$menu = apply_filters( 'wp_page_menu', $menu, $args );

Und damit kann man doch wieder unterschiedliche Ausgaben realisieren. So ruft der folgende Syntax wieder die beiden Beispiellinks in die zu letzt genannte Funktion wp_page_menu() und damit kommt wp_list_pages() ohne die Erweiterung der beiden Links aus.


add_filter('wp_page_menu', 'fb_add_page_link');

Mit ein wenig Überlegung kann man so also recht flexibel die Ausgabe gestallten und die Autoren mitwirken lassen, wenn es darum geht, automatisch Seiten zu Navigationen hinzuzufügen.

Die Idee ist aufgefallen bei Sivel.net

13 Kommentare zu „Statische Links zu WordPress Seiten hinzufügen“

  1. 1
    Kommentar von Steffen

    Verrückt! Gerade eben habe ich rumprobiert wie ich einen Link zum RSS Feed und dem Feedburner Mailabo in die Nav reinbekomme. Hatte zwar schon eine Lösung über einen Theme-eigenen Template Tag (Hybrid), aber deine Lösung ist besser, weil ich ohne zusätzliches CSS auskomme. Und noch verrückter, würde ich Twitter krasser nutzen, wäre ich in diesem Falle schneller gewesen. Danke.

  2. 2
    Kommentar von Ralf

    Ich benutze hierfür mein Redirector Plugin.
    Ich leg einfach eine leere Seite an im Menü und gib als Spezialfeld die Adresse an.
    http://wordpress.org/extend/plugins/redirector/

  3. 3
    Kommentar von Frank Bültge

    @Ralf: auch eine Idee, die dann aber einen Eintrag in der Datenbank erfordert. Im Grunde aber sehr gut für Autoren etc., die diese Möglichkeit benötigen und nicht in den Code wollen. Außerdem hat deine Möglichkeit natürlich den Vorteil, dass man dann wieder im Template Tag per Parameter filtern kann.

  4. 4
    Kommentar von Micha

    Ich bin jetzt mal ketzerisch:

    ...aber bei Veränderungen oder Pflege durch User, die keine Kenntnis oder Zugriffe auf die Templates haben...

    Wenn er das eine nicht kann, wird er sicherlich mit deiner Funktion auch nicht mehr anfangen können ;)

  5. 5
    Kommentar von Frank Bültge

    @Micha: nein, kann er nicht. Dazu dient de Lösung von Ralf. Mit meiner kleinen Funktion wird aber aus meiner Sicht das Markup kleiner für die Theme-Entwickler.

  6. 6
    Kommentar von Nico

    Super Danke so was hatte ich schon länger gesucht, was mich noch intressieren würde eine Art Plugin wo man Seiten einbauen kann die aber nur als Link dienen, um so zum Beispiel Externe Seiten noch in der Navigation zu Verlinken oder für Portfolios oder so was in der Art, damit man dann auch die Anordnung der Seiten dann Anpassen kann.

  7. 7
    Kommentar von Frank Bültge

    @Nico: schau den Kommentar von Ralf an, er gibt dazu eine Lösung.

  8. 8
    Kommentar von Ralf

    Das stimmt allerding Frank, aber zum Glück ist es nur ein Postmeta Eintrag. Ich bin ein riesen Fan davon nur die WP Tabellen zu benutzen, da man hierdurch die wirklich durchdachte WordPress API benutzen kann.

    Ich muss endlich mal dazu kommen Sprachdateien anzubieten. Jedoch bekomm ich PoEdit nicht richtig konfiguriert. Hab das Tutorial von WP-Deutschland verfolgt aber bekomms leider doch nicht hin.

  9. 9
    Kommentar von Frank Bültge

    @Ralf: ich mache alles mit CodeStyling Localization, was mir mehr Möglichkeiten gibt und sauberer arbeitet.

  10. 10
    Kommentar von Ralf

    Das sieht mal sehr interessant aus, werde ich heut abend mal antesten. Danke für den Tipp Frank!

  11. 11
    Kommentar von Andreas

    Ich benutze hierfür mein Redirector Plugin.Ich leg einfach eine leere Seite an im Menü und gib als Spezialfeld die Adresse an.http://wordpress.org/extend/plugins/redirector/

    Das ist ein ganz wunderbares Plugin und exakt das, was ich gesucht habe, um Kategorien als Menüpunkte in einem CMS-Wordpress zu fixieren ohne in der wp_list_pages herumzufrickeln. Vielen Dank!

  12. 12
    Kommentar von Aydin

    hallo, ich habe eine propleme an daur kommt bei mir span e mail vie kann ich mich schützen gibs es eine lösung ? danke Aydin

  13. 13
    Kommentar von Frank Bültge

    @Aydin: es gibt viele Lösungen, dazu muss man weiter ausholen. Die einfachste Lösung ist sicher ein Plugin, wovon es viele unterschiedliche Ansätze und Umsetzungen gibt. Google spuckt sehr viel aus, hier im Blog gibt es auch einige Tipps und ebenso im Plugin-Verzeichnis von WP.

Kommentare sind geschlossen.