Sidebar
ein-/ausblenden

Template-Part im WordPress Template laden

Plugin für WordPress SEO

Anzeige

Wer sein Theme für WordPress recht flexibel gestalten wollte und die Modularisierung liebt, der musste bisher immer über den Pfad gehend das Template einbinden. Mit WordPress 3.0 wird dies anders möglich sein und es steht eine Funktion bereit, die das laden von Templates einfach macht.

Am Beispiel verstehen

Stellen wir uns vor, es soll eine Navigation mehrfach verwendet werden - aber an unterschiedlichen Positionen und an unterschiedlicher Stelle des Markup. Hier würde es also nicht ausreichen, wenn man via CSS das Aussehen beeinflusst. In den meisten Fällen würde man wohl die Navigation in ein eigenes Template auslagern, zum Beispiel die nav.php. In dieser Datei befindet sich das HTML-Markup und die nötigen Template Tags um eine Navigation zu erstellen. Diese Datei würde man dann inkludieren. Bis WordPress 3.0 wurde das üblicherweise wie folgt getan: include( TEMPLATEPATH . '/navi.php' );

Funktion get_template_part()

Mit WordPress 3.0 soll in diese Form der Modularisierung mehr Bewegung kommen und so kann man mit Hilfe der Funktion get_template_part() Templates ansprechen. Die Funktion erlaubt die Übergabe von zwei Parametern:


/**
 * @uses locate_template()
 * @since 3.0.0
 * @uses do_action() Calls 'get_template_part{$slug}' action.
 *
 * @param string $slug The slug name for the generic template.
 * @param string $name The name of the specialised template.
 */
get_template_part( $slug, $name = null )

und besitzt einen Hook get_template_part_$slug, den man ansprechen kann.

Kommen wir nun zurück auf das obige Beispiel der Navigation, die nun mit Hilfe der neuen Funktion wie folgt inkludiert wird: get_template_part( 'navi' );. In diesem Fall wurde lediglich der Parameter slug übergeben - navi - der nun dafür sorgt, dass die navi.php geladen wird.
Im nächsten Schritt soll die Navi, welche explizit für die Sidebar erstellt wurde, genutzt werden. Der Source ist in der navi-sidebar.php gehalten und damit sieht der Aufruf wie folgt aus: get_template_part( 'navi', 'sidebar' );. Der Aufbau der Template-Datei muss also aus slug-name.php entstehen.

So lassen sich quasi beliebige Muster erstellen, die vor allem dann an Wert gewinnen, wenn es um Wiederverwendung geht oder wenn man mit Hilfe von Child-Themes arbeitet, da man so auf das Vater-Theme zugreifen kann und doch recht flexibel die eigenen Templates erstellen kann.

Reihenfolge beim Laden

WordPress nutzt beim Laden der Templates eine Hierarchie, so dass man auf verschiedene Templates zugreifen kann, ein Beispiel soll es verdeutlichen. Das Vater-Theme befindet sich in wp-content/themes/ und benutzt den Ordner wpbasis, das Child-Theme ist im Ordner wpbasischild zu finden. Nun gibt es in einem der Templates den Aufruf <?php get_template_part( 'navi', 'index' ); ?>. Nun wird nach der navi-index.php gesucht mit folgendem Muster:

  1. wp-content/themes/wpbasischild/navi-index.php
  2. wp-content/themes/wpbasischild/navi.php
  3. wp-content/themes/wpbasis/navi-index.php
  4. wp-content/themes/wpbasis/navi.php

Auch hier also einige Neuerungen unter der Haube, die für Theme-Autoren recht nützlich sein können. Da in letzter Zeit die Nutzung von Child-Themes gewachsen ist, sicher eine nützliche Funktion.

2 Kommentare zu „Template-Part im WordPress Template laden“

  1. 1
    Kommentar von Micha

    Ich habe bei der Entwicklung mienes Theme-Frameworks festgestellt, das get_template_part() nicht so flexibel ist wie locate_template(). get_template_part kann nicht in Unterordner schauen und damit kann man seine Parts wie Bylines, Posttemplates usw. nicht sinnvoll strukturieren bzw. die ganzen Schnipsel müssen in der Themeroot stehen, was nicht gerade zur Übersichtlichkeit beiträgt.

  2. 2
    Kommentar von Retsche

    Besten Dank für den Beitrag. Super interessant was mit WordPress 3.0 zur Verfügung gestellt wird.

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.

E-Mail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.

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.