Das Beitragsformat in WordPress gehört zu jene Funktionen, die zugleich nützlich als auch verwirrende sind. Dabei kann man langjähriger Nutzer von WordPress sein ohne je was von Beitragsformaten gehört oder gesehen zu haben.
„Schuld“ daran ist eine Eigenheit von Beitragsformaten: sie müssen explizit vom Theme unterstützt werden, damit sie überhaupt im Backend von WordPress angezeigt werden.
Was sind eigentlich Beitragsformate?
Beitragsformate ist der deutsche Begriff für das Feature „Post Format“ innerhalb von WordPress, also das Format von Beiträgen. Sofern ein Themes es unterstützt, kann ein Beitrag ein abweichendes Format haben, wenn ein abweichendes Beitragsformat ausgewählt wurde. Beitragsformate sind nicht identisch mit Seitentemplates. Um die Verwirrung komplett zu machen, können Beitragsformate nicht nur für Beiträge, sondern auch für Seiten und sogar Custom Post Types zur Verfügung stehen. Vereinfacht gesagt ist ein Beitragsformat zunächst einmal nichts anderes als eine Information darüber, welches Format ein Beitrag haben kann.
Mögliche Beitragsformate
Seit WordPress 3.1 gibt es die folgenden fest definierte Beitragsformate:
- aside
- gallery
- link
- image
- quote
- status
- video
- audio
- chat
Mehr als diese neun möglichen Formate gibt es nicht. Weitere Beitragsformate können derzeit weder durch ein Theme noch durch ein Plugin festgelegt werden (auch wenn es durchaus Hacks gibt, mit denen dies trotzdem möglich ist).
Die Art der Beitragsformate, also „gallery“ für Galerien mit Bildern oder Zitate mittels „quote“ ist dabei lediglich ein „So könnte es sein und verwendet werden“. Die konkrete Gestaltung im Frontend hängt immer vom Theme ab. Jedes Theme kann dabei keine, alle oder nur ausgewählte Beitragsformate zur Verfügung stellen.
Beitragsformate im Theme aktivieren
Sofern das aktive Theme selber keine Beitragsformate zur Verfügung stellt, können diese über die Datei functions.php aktiviert werden. Dabei sollte in jedem Fall mit einem Child Theme gearbeitet werden. Innerhalb der functions.php reicht dann folgender Eintrag:
function aktiviere_beitragsformate() { add_theme_support( 'post-formats', array( 'gallery', 'quote', 'video', 'aside', 'image', 'link') ); } add_action( 'after_setup_theme', 'aktiviere_beitragsformate', 30 );
Über die Funktion add_theme_support() können verschiedne Feature von WordPress vom Theme unterstützt werden. In Fall der Beitragsformate wäre das „post-formats“. Der zweite mit Aufruf der Funktion übergebene Parameter ist ein Array, in dem die Formate aufgelistet werden, die das Theme unterstützen will.
Über add_action kann ein spezifischer Hook in WordPress verwendet werden, um die zuvor definierte Funktion in WordPress einzuklinken. Da die Beitragsformate an das Theme gebunden sind, bietet es sich an, ihre Initialisierung dann vorzunehmen, wenn das Theme aktiviert wurde (vgl. dazu WordPress die Action Reference im Codex).
Der letzte Parameter im Aufruf von add_action bezieht sich auf die Priorität. Wird keine vergeben, wird der Standardwert von 10 verwendet. Sofern das Parent Theme selber Beitragsformate unterstützt, würde ohne die Vergabe einer Priorität die Definition durch das Parent Theme Vorrang haben. Um die Zuweisung im eigenen Child Theme nach der im Parent Theme auszuführen, lässt sich eine niedrigere Priorität festlegen (gültig sind positive Ganzzahlen).
Durch die Ergänzung besteht im Backend von WordPress die Möglichkeit, das Format eines Beitrags festzulegen. Das dazugehörige Icon wird zudem in der Übersicht der Beiträge im Backend angezeigt.
Formatierung eines Beitrags über CSS
Damit ein Beitrag über CSS formatiert werden kann, muss im entsprechenden Template des Themes eine CSS-Klasse vergeben werden, die dann verwendet werden kann. WordPress bietet dafür die Funktion post_class() an, die einen oder mehre der folgenden Werte ausgeben kann (vgl. Codex):
- .post-id
- .post
- .attachment
- .sticky
- .hentry
- .category-ID
- .category-name
- .tag-name
- .format-name
Relevant für Beitragsformate ist die letzte Klasse, format-name, wobei der Name dem Formattyp entspricht, also zum Beispiel bei Zitaten „quote“.
Üblich ist es, post_class() zur Ausgabe der CSS-Klassen beim article-Tag zu verwenden:
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> … </article>
Sofern die CSS-Klasse für das Beitragsformat an dieser Stelle gesetzt wurde, kann dann in der Datei style.css des Themes die Formatierung vorgenommen werden, zum Beispiel so:
.format-quote p:before { color: #ccc; quotes: "1C""1D""18""19"; content: open-quote; font-size: 4em; line-height: 0.1em; margin-right: 0.25em; vertical-align: -0.4em; } .format-quote p:after { color: #ccc; quotes: "1C""1D""18""19"; content: close-quote; font-size: 4em; line-height: 0.1em; margin-right: 0.25em; vertical-align: -0.4em; }
Hierdurch würden sämtlich Absätze durch hervorgehobene Anführungszeichen umschlossen werden.
Eigene Templates für Beitragsformate
Etwas weiter als nur über reine CSS-Formatierung geht die Möglichkeit, ein spezifisches Template in Abhängigkeit vom Beitragsformat zu verwenden. Dabei wird die Funktion get_template_part von WordPress verwendet, mit der sich Bereich innerhalb eines übergeordneten Templates hinzufügen lassen. Dadurch lassen sich Templates in kleinere Bausteine zerlegen und zusätzliche If-Abfragen einsparen, in dem man über die get_template_part einfach abhängig vom Kontext die entsprechende Vorlage lädt. Anders als die normale include Anweisung von WordPress wird dabei automatisch ein Fallback verwendet, wenn die entsprechende Datei nicht gefunden wird. Würde zum Beispiel innerhalb der Datei single.php des Themes folgendes stehen
<?php get_template_part( 'template-parts/content', 'single' ); ?>
sucht WordPress im Ordner „template-parts“ des Themes nach einer Datei „content-single.php“. Ist diese nicht vorhanden, wir sie, sofern das Theme ein Child Theme ist, im Parent Theme gesucht. Sofern auch dort keine Datei „content-single.php“ vorliegt, verwendet WordPress die Datei „content.php“ im Child Theme beziehungsweise im Parent Theme. Näheres dazu findet sich wie immer im WordPress Codex. Relevant für das Beitragsformat ist die Verwendung von get_template_part im Abhängigkeit zum gewählten Format.
<?php get_template_part( 'template-parts/content', get_post_format() ); ?>
Würde zum Beispiel der Beitrag das Format „Zitat“ (quote) haben, sucht WordPress nach der Datei „content-quote.php“. In dieser wiederum kann dann die Ausgabe über HTML und PHP abweichend zum normalen Beitragsformat gestaltet werden.
Link zu anderen Beiträgen mit dem selben Format
Das Format eines Beitrags kann nicht nur dazu verwendet werden, ihn anders zu gestalten, sondern es ist darüber hinaus auch möglich, eine Archivseite anzeigen zu lassen mit Beiträgen, die alle das selbe Format aufweisen. Die direkte URL liefert WordPress über die Funktion get_post_format_link, allerdings wird hier als Parameter ein das Beitragsformat erwartet. Statt eines festgelegten Strings kann auch das Format des jeweiligen Artikels verwendet werden, welches sich mit get_post_format() ermitteln lässt. Die URL sollte dann aus Sicherheitsgründen über die Funktion esc_url von WordPress gefiltert werden. (vgl. dazu den Eintrag im Codex).
<?php echo esc_url( get_post_format_link(get_post_format()) ); ?>
Die ausgegeben URL in der Form ist allerdings nur dann sinnvoll, wenn sie auch innerhalb eines Link-Tags verwendet wird.
<a href="echo esc_url( get_post_format_link(get_post_format()) ); ?>"> »
Hier wird als Text für den Link auf die Übersetzungsfunktion von WordPress zurückgreifen, um in Abhängigkeit zur Seitensprache den richtigen Sprachbaustein zu verwenden. Im aktiven Theme sollte eine Sprachdatei vorhanden sein, so dass statt TEXTDOMAIN dann der Parameter verwendet wird, welcher in der Datei functions.php bei Laden der Textdomain über load_theme_textdomain angegeben wurde. Innerhalb der Sprachdatei müssen dann noch Sprachbausteine ergänzt und übersetzt werden. Direkt im Backend von WordPress lässt sich das mit dem Plugin Loco Translate durchführen.
Beitragsformat bei Custom Post Types
Über die Funktion add_post_type_support kann das Beitragsformat nicht nur für Beiträge, sondern auch für Seiten oder spezifische Custom Post Types zugelassen werden. Dies muss für jeweils separat durchgeführt werden, also zum Beispiel für Seiten und den Custom Post Type „Wunsch“ in folgender Form:
add_post_type_support('page', 'post-formats'); add_post_type_support('wunsch', 'post-formats');
Mit der Funktion add_post_type_support lassen sich darüber hinaus für jeden Beitragstypen weitere Feature freischalten, zum Beispiel Beitragsbilder oder ein Expert (vgl. dazu den Eintrag im Codex).
Zusammenfassung
Auch wenn das gewählte Theme keine oder nicht alle Beitragsformate unterstützt, lassen sich das mit nur wenigen Schritten wie gezeigt ergänzen. Verschwiegen werden soll an dieser Stelle jedoch nicht, dass Beitragsformate als Bestandteil von WordPress umstritten sind. Ursache dafür ist die Intransparenz für Benutzer, wann in in welchem Umfang sie verwendet werden können — das hängt im Einzelfall vom verwendeten Theme ab. Wer sich wenig mit WordPress auskennt, wird nicht wissen, warum mal die Beitragsformate zur Verfügung oder warum eben nicht. Zudem sind die Beitragsformate eingeschenkt auf die von WordPress definierten. Zuletzt in diesem Sommer wurde darüber kontrovers diskutiert, die Funktionalität besser in ein Plugin auszulagern.
5 Kommentare