WordPress post_class() erweitern
Seit der Version 2.7 steht uns in WordPress bei der Theme-Entwicklung die außerordentlich praktische und umfangreiche Funktion post_class() zur Verfügung. In komplexeren WordPress-Themes ist es manchmal nötig diese noch zu erweitern. Das ist auf verschiedene Arten möglich.
post_class() anwenden
Mit der WordPress-Version 2.7 wurde die Funktion post_class() eingeführt. Diese wird meist auf einen den Post im Loop umfassenden div-Container angewendet.
<div <?php post_class(); ?>>
<!-- hier der post -->
</div>
Hier gibt die Funktion eine Reihe von CSS-Klassen aus, die für diesen Posts spezifisch sind (Post oder Page, Kategorie, Tags, sticky etc.).
post_class() erweitern
In komplexeren WordPress-Themes kann es nun vorkommen, dass diese Standardklassen nicht ausreichen und man den Post-Klassen weitere hinzufügen möchte.
Am einfachsten geht das wie folgt:
<?php post_class('meine-klasse noch-eine'); ?>
In diesem Fall würden die Klassen meine-klasse und noch-eine den Standardpostklassen hinzugefügt.
post_class() erweitern (functions.php)
Ein anderer Ansatz ist das Steuern der Post-Klassen zentral über die functions.php. Dafür bedienen wir uns dem WordPress-Filter post_class:
<?php
add_filter('post_class','my_post_classes');
function my_post_classes($classes) {
$classes[] = 'meine-klasse';
$classes[] = 'noch-eine';
return $classes;
}
?>
Auch in diesem Fall würden die Klassen meine-klasse und noch-eine den Standardpostklassen hinzugefügt.
post_class() erweitern (functions.php & Conditional Tags)
Spannend wird es nun, wenn man die Post-Klassen mithilfe der Conditional Tags vom gezeigten Inhalt abhängig erweitert.
<?php
add_filter('post_class','my_post_classes');
function my_post_classes($classes) {
if(is_front_page()) $classes[] = 'frontpage-klasse';
if(is_singular()) $classes[] = 'singular-klasse';
return $classes;
}
?>
Dieses macht Sinn, wenn man z. B. auf der Startseite Posts in mehreren Spalten anzeigen möchte. Dazu könnte man die Klassen z. B. um box erweitern.
Auch wenn man mit dem clearfix-Hack arbeitet, kann diese Funktion sehr nützlich sein.
<?php
add_filter('post_class','my_post_classes');
function my_post_classes($classes) {
if(is_archive()) $classes[] = 'clearfix';
return $classes;
}
?>
Relevante Links
- WordPress Codex: post_class()
- WordPress Codex: Conditional Tags
WordPress Mail-Funktion wp_mail()
WordPress Seiten-ID anhand des Titels herausfinden
Tutorial: Verschachtelte WordPress Widget-Areas
Neue Funktion body_class() in WordPress 2.8
Kommentare
Franz - am 6. Mai 2010 -
Da ist ein Tippfehler in den Zeilen mit add_filter().
Ansonsten guter Post
Simon [webdemar] - am 6. Mai 2010 -
Vielen Dank Franz! Ist berichtigt.