Post Pic

Momentan versuche ich WordPress als CMS zu benutzen , welches einige Schwierigkeiten mit sich bringt. Zum Beispiel ist die Anzeige von Unterpunkten in der Seitennavigation nicht gerade sehr einfach darzustellen. Das Problem ist, dass zu den Unterseiten auch alle darüberliegenden Seiten angezeigt werden. Mit der normalen Funkion wp_list_pages() kommt man da nicht weit, deshalb zeige ich euch wie ihr Unterseiten anzeigen könnt.

Der standardweg für eine Navigation, welcher auch im WordPress manual steht, ist folgender:

1
2
3
4
5
6
7
if($post->post_parent) {
	$children =     wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
} else {
	$children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
}
if ($children) {
	echo $children; }

Mit Ihm ist jedoch nur eine 2 Level Navigation möglich, ab dem 3. Level gibt es Schwierigkeiten, ein weiteres Problem ist, dass wenn man auf einen Unterpunkt klickt, die Navigation für die Schwesternelemente verschwinden, man also keine Chance hat zwischen den Unterpunkten zu navigieren.

Für den folgenden Lösungsweg für eine Multilevelnavigation benötigt ihr die beiden Plugins WP-PagesNav und Fold Page List. Das Problem der Anzeige von übergeordneten Seiten wird größtenteils durch das WP-PagesNav Plugin beiseite geschafft, für das anzeigen von den Elementen, die auf gleicher Ebene sind, benötigt ihr nun noch das Fold Page List Plugin, um herauszufinden welches Seite die übergeordnete Seite ist. Die zwei Plugins müsst ihr einfach nur installieren und aktivieren, es ist keine weitere Konfiguration im Backend nötig. Beide Plugins sind sehr gut auf der Seite des jeweiligen Plugins dokumentiert, so dass ich einfach mal den Code für euer Theme zur Anzeige der Unterpunkte poste:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
get_queried_object_id();	//aktuelle ids holen
	$ancestorIDs = _wswwpx_page_get_ancestor_ids($g_page_id);	//alle übergeordneten und aktuelle Seite in Array schreiben
	$subpageargs="show_children=1&sort_column=menu_order&show_root=0&show_parents=0"; //Argumentenliste für wp_pages_nav
        if(sizeof($ancestorIDs)>2)	// Ab Ebene 3 werden die unterseiten der übergeordneten Seite angezeigt
	{
		$upperpageid=$ancestorIDs[sizeof($ancestorIDs)-2];	//Die ID der übergeordneten Seite wird zugewiesen
		if($upperpageid!=9)
		{
			$subpageargs.="&current=".$upperpageid;	//anhängen des Arguments der aktuellen sicht auf die übergeordnete Seite, zwecks navigieren zwischen unterpunkten
		}
	}
	if($post->ID!=9)
	{
		if(function_exists("wp_pages_nav")) {
      			wp_pages_nav($subpageargs);
    		}
	}
?>

Anmerkung zum Code: In Zeile 13 überprüfe ich ob eine bestimmt Seite nicht aufgrufen wird, da ich dort keine Unterpunkte anzeigen möchte, dies ist nicht unbedingt nötig, verdeutlicht jedoch , wie ihr Seiten von der Anzeige der Subnavi ausschließen könnt

Auf die Lösung zu kommen hat mich gefühlte 10 Stunden Zeit gekostet, da ich erst davon ausging , dass das Problem auch mit nur einem Plugin zu bewältigen ist.

23. Aug. von Leon



3 Kommentare

  1. Hi,

    kann es sein, dass hier ein Teil beim Code fehlt?
    Bei mir kennt der die Funktion „get_queried_object_id“ nicht, obwohl sie ja Teil von WP ist?!

    Viele Grüße
    Simon


    Simon



  2. Diesen Beitrag finde ich äusserst hilfreich, genau was ich brauche. Ich muss in einem Thema eine dritte Navigationsebene anzeigen lassen können. Das mit den Plugins ist klar, aber wohin muss ich den Code setzen? In welche WordPress-Datei?

    Vielen Dank für deine Hilfe.


    seyve



  3. Moin moin,

    ich kriegen den zweiten Code einfach nicht zum laufen :(((

    Die „Special Entities“ Fehler habe ich beachtet und umgewandelt. Er meckert bei get_queried_object_id(); rum!

    Ich habe am Anfang des Codes einfach <?php oder geht das so nicht?

    Gruß, Peter


    Peter



Beitrag kommentieren