Post-Template-Namen zu post_class() hinzufügen

Bei meinem aktuell in Entstehung befindlichen Theme möchte ich Beiträge mit Post-Templates bereits auf der Blogübersicht anders darstellen. Dafür füge ich den Namen des Post-Templates über den post_class-Filter der Ausgabe von post_class() hinzu. Hier zeige ich euch, wie das funktioniert.

Funktion für Rückgabe des Post-Template-Slugs

Da ich den Namen des Post-Templates noch an anderen Stellen im Theme brauche, schreiben wir zunächst eine eigene Funktion, die den Namen des Post-Templates ermittelt und zurückgibt:

if ( ! function_exists( 'photographia_get_post_type_template' ) ) { /** * Returns the post type template slug * without templates/ dir and .php ending. * * @return string */ function photographia_get_post_type_template() { $template_slug = get_page_template_slug(); if ( '' !== $template_slug ) { /** * Remove »templates/« from slug. */ $template_slug = str_replace( 'templates/', '', $template_slug ); /** * Remove .php file ending. */ $post_type_template = str_replace( '.php', '', $template_slug ); return $post_type_template; } else { return ''; } } }
Code-Sprache: PHP (php)

In der ersten Zeile prüfen wir, ob die Funktion photographia_get_post_type_template() vielleicht durch etwas anderes (etwa ein Child-Theme) überschrieben wurde. Innerhalb der Funktion holen wir uns über get_page_template_slug() den Slug des aktuellen Post-Templates. Wenn der Beitrag kein Template hat, gibt der Aufruf einen leeren String zurück. Falls das Ergebnis nicht leer ist, sieht der Template-Slug bei meinem Theme so aus: templates/name-des-templates.php. Den templates/-Teil sowie die .php-Endung brauchen wir nicht – die entfernen wir über zwei Aufrufe von str_replace() und geben den $post_type zurück.

Falls kein Template gesetzt ist, geben wir einen leeren String zurück.

Funktion zum Hinzufügen der Klasse

Kommen wir nun zu der Funktion, die für das Filtern von post_class verantwortlich ist:

/** * Add classes to post_class() * * @param array $classes array with post classes. * * @return array */ function photographia_filter_post_classes( $classes ) { /** * Get the post type template name. * Empty string if no template is used. */ $post_type_template = photographia_get_post_type_template(); /** * Add post template class if post has a template */ if ( '' !== $post_type_template ) { $classes[] .= "-$post_type_template-template"; } return $classes; } add_filter( 'post_class', 'photographia_filter_post_classes' );
Code-Sprache: PHP (php)

Über den Aufruf unserer photographia_get_post_type_template()-Funktion holen wir uns den String mit dem Post-Template-Namen oder einen leeren String, wenn kein Template vergeben ist. Wenn wir keinen leeren String zurückbekommen, fügen wir einen neuen Array-Wert in $classes ein und geben das Klassen-Array zurück.

Wenn ein Beitrag nun ein Template hat, wird durch den Aufruf von post_class() im Loop eine Klasse nach dem Muster -templatename-template ausgegeben.

Schreibe einen Kommentar

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