Michael Oeser - Fotografie, Film, Webdesign - Logo

Wie man in WordPress Unterseiten gezielt abfragt

Unterseiten, sogenannte „Child Pages“ gezielt abzufragen und einzusetzen ist mit normalen WordPress Bordmitteln leider etwas umständlich. Einen Conditional Tag (Bedingungsabfrage) dafür liefert WordPress standardmäßig nicht mit. Hier zeige ich einige Möglichkeiten, wie man WordPress recht einfach auf die Sprünge helfen kann und einen Conditional Tag schafft, den es eigentlich gar nicht gibt.

Am 23.09.2009 hatte ich bereits via Twitter auf einen englischen Beitrag zum dem Thema hingewiesen. Aufgrund der Resonanz habe ich mich entschlossen, das Ganze mal auf Deutsch zusammenzufassen und zu ergänzen.

Worum es bei Conditional Tags geht

Conditional Tags, also Funktionen, die etwas ausführen, wenn eine bestimmte Bedingung erfüllt ist, sind eine tolle Sache in WordPress. Man kann damit beispielsweise seinen Sidebar so gestalten, dass er individuelle Inhalte ausgibt, je nachdem, ob er gerade auf der Homepage, einer Archivseite, oder in einem Beitrag aufgerufen wird. Das ist nicht nur praktisch, sondern erlaubt auch eine gewisse Dynamik und kontextabhängige Darstellung von Inhalten. Es ist vielleicht sinnvoll die letzten Kommentare auf einer Beitragsseite anzuzeigen, auf der Homepage muss das noch lange nicht sinnvoll sein.

is_child – der fehlende Conditional Tag

Nun kann man mit Conditional Tags schon eine Menge anfangen. Man kann verschiedene Dinge tun, wenn man auf der Homepage ist (is_home), wenn man sich auf einer Beitragsseite (is_single) befindet, oder wenn man eine statische Seite (is_page) aufgerufen hat.

Was komischerweise völlig in WordPress fehlt, ist ein Conditional Tag für Unterseiten (Child Pages), der wahrscheinlich is_child heißen würde, so er denn existieren würde. Gerade, wenn man eine WordPress Seite als eher klassische Website und weniger als Blog betreibt, kann es schnell sein, dass man einige Unterseiten hat und dort wiederum gewisse kontextabhängige Dinge Anzeigen will, die man eben nur verwenden möchte, wenn man sich auf einer solchen Unterseite befindet.

Im Grunde ist es zwar auch kein Hexenwerk diese Angelegenheit mit ein Bisschen Code hinzuprogrammieren. Dennoch wäre es doch viel einfacher, hätte man den Conditional Tag is_child zur Verfügung.

Die Erschaffung eines Conditional Tags

Da WordPress uns diesen Conditional Tag nicht zur Verfügung stellt, müssen wir ihn uns eben selbst „erschaffen“. Dazu schreiben Sie die folgende kleine Funktion in die functions.php, die zu Ihrem verwendeten Theme gehört.

function is_child ($of_page = NULL) {
	global $post;
	if (! $post->post_parent || ! is_page())
		return FALSE;
	if (! isset($of_page))
		return TRUE;
	else if ($of_page == $post->post_parent)
		return TRUE;
	else if ($of_page == get_post($post->post_parent)->post_name)
		return TRUE;
	return FALSE;
}

Sie können den neuen Conditional Tag dann einsetzen, wie beispielswesie is_page();.

if ( is_child() )  // returns true if the page is a child of any
if ( is_child(12) )  // returns true if the parent ID is 12
if ( is_child('about') )  // returns true if the page slug of the parent is 'about'

Diese Plugins führen auch zum Ziel

Monika Thon-Soun von texto.de hatte freundlicherweise als Ergänzung Informationen über diese beiden Plugins beigesteuert. Beide dienen dazu, Unterseiten abzufragen und diverse Spielereien damit zu realisieren.

is_child
is_subpage

Anwendungsmöglichkeiten

Es gibt eine Reihe von Anwendungsmöglichkeiten (komplexe, kontextabhängige Navigationen sind nur ein Beispiel) und ich freue mich über gute und intelligente Beispiele. Schreiben Sie doch einfach einen Kommentar und erläutern Ihr Anwendungsbeispiel.