Samstag, 21. Januar 2006 Druck-Ansicht
gunnart. arbeitet vorwiegend mit “pages” - Oben die Hauptnavigation, an der Seite tauchen die jeweiligen Unterseiten auf. Was vorher mit verschiedenen Page-Templates und “leeren” Hilfs-”Oberseiten”, um die zugeordneten Unterseiten mit wp_list_pages(’child_of=XY’); auflisten zu können umgesetzt war, ist innerhalb einer “sidebar.php” gelöst.
Befindet man sich auf einer “Oberseite”, ist liegt die Lösung auf der Hand:
<ul class="navilist">
<li class="page_item current_page_item"><a href="<?php the_permalink()?>" title="<?php the_title();?>"><?php the_title(); ?></a></li>
<?php wp_list_pages('title_li=&sort_column=menu_order&child_of='.$posts[0]->ID); ?>
</ul>
Auf diese Weise wird ein als “aktiv” markierter Listenpunkt mit dem zur aktiven Seite verlinkten aktuellen Seitentitel als Linktext erzeugt. Darunter werden alle “Kinder” dieser Seite aufgelistet. Ein bisschen schwieriger wird’s, wenn man sich auf einer “Unterseite” befindet - denn dann muss zuerst der Link zur “Oberseite” auftauchen und danach eine Liste mit den “Kindern”. Wordpress stellt dazu von Haus aus keine Funktion zur Verfügung, aber $posts[0]->post_parent gibt die ID der jeweils übergeordneten Seite zurück. Ist keine Seite übergeordnet, wird der Wert “0″ zurückgegeben.
Damit haben wir schon den Code für die Ausgabe einer Liste mit allen Seiten, die die gleiche “Oberseite” haben, zusammen - und der funktioniert auch, wenn man sich bereits auf einer “Unterseite” befindet.
<?php wp_list_pages('title_li=&sort_column=menu_order&child_of='.$posts[0]->post_parent); ?>
So fehlt allerdings der Menüpunkt mit der jeweiligen “Mutterseite”. Einen einfachen Link zu ihr könnte man mit der Funktion get_permalink(); erzeugen - in die Klammer setzt man die ID der “Mutterseite” ein: get_permalink($post[0]->post_parent); - Aber es fehlt noch der passende Link-Text. Den kann man sich mit der Funktion get_postdata(); holen und in ein Array schreiben.
Der Code für den Link zur “Mutterseite” von einer Unterseite aus ist also folgender:
<?php $mutterseite = get_postdata($posts[0]->post_parent); ?>
<li class="page_item"><a href="<?php echo get_permalink($mutterseite[ID]); ?>" title="<?php echo $mutterseite[Title];?>"><?php echo $mutterseite[Title]; ?></a></li>
In der “sidebar.php” muss noch abgefragt werden, ob es sich a) gerade überhaupt um eine Seite (”page”) handelt - und wenn ja, ob b) diese Seite “Oberseiten” hat, denn sonst passieren merkwürdige Dinge. Im Zusammenhang der Code für die Sidebar:
<?php
if (is_page()) // Wenn's eine Seite ist
{
if ($posts[0]->post_parent != 0) // Wenn es "Unterseite" mit "Mutterseite" ist
{
?>
<ul class="navilist">
<?php
$mutterseite = get_postdata($posts[0]->post_parent);
?>
<li class="page_item"><a href="<?php echo get_permalink($mutterseite[ID]); ?>" title="<?php echo $mutterseite[Title];?>"><?php echo $mutterseite[Title]; ?></a></li>
<?php wp_list_pages('title_li=&sort_column=menu_order&child_of='.$posts[0]->post_parent); ?>
</ul>
<?php
}
else // Wenn Seite eine "Oberseite" ohne "Mutterseite" ist
{
?>
<ul class="navilist">
<li class="page_item current_page_item"><a href="<?php the_permalink()?>" title="<?php the_title();?>"><?php the_title(); ?></a></li>
<?php wp_list_pages('title_li=&sort_column=menu_order&child_of='.$posts[0]->ID); ?>
</ul>
<?php
}
} // else für Kategorien, Archive und Single
?>
Eine ähnliche Navigationsstruktur kann man (sogar noch viel einfacher) mit einem PlugIn erreichen: Bei Arno Simon ist “Display SubMenue” zu finden. Das macht ziemlich genau das selbe - Man kann damit bloß nicht erreichen, dass die ausgegebene Navigationsliste nicht hierarchisch geordnet ist, denn anders als wp_list_cats(); kann wp_list_pages(); nichts mit dem Parameter ‘hierarchichal=0′ anfangen.
In Wordpress kann man “pages” nicht als Entwurf speichern. Möchte man halb fertige Seiten noch nicht an die Öffentlichkeit lassen, muss man sie aus der Navigation entfernen. Allerdings ist es recht unpraktisch, alle Aufrufe von wp_list_pages(); immer mit den entsprechenden exclude-Werten zu benutzen, weil man so immer zusätzlich an seinen Theme-Files herumschrauben muss.
Die Lösung ist ein PlugIn namens “Sidebar Page Switcher” und kommt von Thorsten Werner: Nach Installation des PlugIns (läuft übrigens mit Wordpress 1.5.2 und 2.0) wird einem beim “Seite schreiben” ein zusätzliches Dropdown-Menü zur Verfügung gestellt, in dem man zwischen “Diese Seite in der Sidebar Anzeigen” und “Ausblenden” wählen kann. Dazu muss man in der “sidebar.php” seines Themes das Template-Tag wp_list_pages(); durch sps_list_pages(); austauschen.
Die “ausgeblendeten” Seiten tauchen dann leider nur in der Navigation nicht mehr auf. Sie sind durch Eingabe der direkten Adresse noch erreichbar - und auch noch über die Suchfunktion zu finden. Wirklich versteckt sind die Inhalte dadurch jedoch nicht.
Bookmarks, Feed und Links
Wenn Ihnen dieser Beitrag geholfen hat ...
Beiträge zu ähnlichen Themen:
7 Antworten zu Seitennavigation - Untermenüs mit get_postdata und $post
Kommentar schreiben