WordPress-Hacks: Artikel-Templates mit get_posts_format anpassen

Es gibt eine ganze Reihe von Gründen, warum manche Inhalte in WordPress in einem anderen Format ausgegeben werden sollen. Bei meinen Blogs greifen unterschiedliche davon: Automatisierung mit eigenen Loops im Seiten-Template sind eine Variante, eine andere Variante ist die Einbindung in die Seitenstruktur. Seiten lassen sich schon seit langem mit einem eigenen Template versehen, neu seit WordPress 3.1 ist die Möglichkeit, auch Artikeln ein Template zuzuweisen – und zwar mittels bordeigenen Mitteln. Mit der Funktion get_posts_format() lassen sich im Theme unterschiedliche Templates realisieren.

Die wenigsten Themes von der Stange, die es so für WordPress gibt, unterstützen das bereits. Das ist aber verhältnismäßig einfach nachzurüsten. Um einem WordPress-Artikel ein Template zu verpassen, aktivieren wir zunächst den Support für Post-Formate in der functions.php:
//Theme-Support für Artikel-Formate
add_theme_support( 'post-formats', array( 'aside', 'gallery', 'link', 'quote', 'video', 'image', 'status', 'chat', 'audio' ));

Zur Verfügung stehen bordseitig die Formate Standard, Kurzmitteilung, Galerie, Link, Zitat, Video, Bild, Statusmitteilung, Chatprotokoll und Audio. Die müssen nicht alle eingefügt werden, es können auch einzelne Formate aktiviert werden – einfach das Array modifizieren. Die Namen dürfen allerdings nicht verändert werden. Nun muss die single.php des Templates natürlich angepasst werden – wenn wie in meinem speziellen Fall nur ein einzelnes Template verbaut werden soll, kann einfach ein Parallel-Layout mittels
//Weiche für Post-Formats
if ( has_post_format( 'aside' )) {
// Template für Kurzmitteilung
} else {
// Normales Artikeltemplate
}

um das eigentliche Template herumgebaut werden.

Spannend wird es, wenn man diese Funktion „missbraucht“, um beispielsweise einem WordPress-Artikel das Layout einer Seite zu verpassen. Wer also beispielsweise das Post-Format „Aside“ dafür nutzt, ein Seitentemplate über den eigentlichen Artikel zu ziehen, wird sich auf Dauer daran stören, dass im Artikel-Optionsfeld „Kurzmitteilung“ als Format steht. Da die Bezeichnungen im Core von WordPress verankert sind und Webmaster wirklich nie im Core von WordPress herumfuhrwerken sollten – schon allein, weil sich der Core mit jedem Update ändern kann und dann alle Anpassungen für die Tonne waren -, brauchen wir einen Plan B, um aus der „Kurzmitteilung“ beispielsweise ein „Seitenlayout“ zu machen. Das geschieht wiederum in der functions.php – und zwar vor dem Aufruf von get_posts_format()!
//post-Formate umbenennen
function rename_post_formats($translation, $text, $context, $domain) {
$names = array(
'Aside' => 'Seitenlayout'
);
if ($context == 'Post format') {
$translation = str_replace(array_keys($names), array_values($names), $text);
}
return $translation;
}
add_filter('gettext_with_context', 'rename_post_formats', 10, 4);

Mit diesen wenigen Änderungen haben wir nun bereits ein neues Template realisiert. Wer natürlich alle Post-Formats von WordPress ausreizen will, muss die single.php entsprechend aufwändig modifizieren und eigene Templates kreieren. Wer aber nur kleine Modifikationen an einzelnen WordPress-Artikeln realisieren möchte, hat mit get_posts_format() eine echte Universalwaffe an die Hand bekommen, mit denen dieses Vorhaben binnen weniger Minuten umgesetzt werden kann!

Posted in WordPress und Web and tagged , , .

One Comment

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.