body_class mit Kategorien

Nutzt man WordPress und möchte man die Darstellung einzelner Artikel gemäß ihrer Kategorie anpassen, und dabei nicht nur auf den Artikel selbst, sondern die gesamte Seite zugreifen, helfen entsprechende Klassen, die dem body zugewiesen werden.

Fügt man folgenden Code in die functions.php ein, werden Klassen mit den Kategorie-IDs dem body-Tag zugewiesen:

// add category IDs to the body class
function category_id_class($classes) {
	global $post;
	foreach((get_the_category($post->ID)) as $category)
		$classes[] = 'cat-' . $category->cat_ID;
	return $classes;
}
add_filter('body_class', 'category_id_class');

Wer die Klassen in derselben Formatierung auch dem jeweiligen Eintrag zuweisen möchte, kann dies durch hinzufügen folgender Zeile erreichen:

add_filter('post_class', 'category_id_class');

Da zur Gestaltung des Eintrags bereits Kategorie-Klassen zur Verfügung stehen, und eine doppelte Zuweisung (body_class & post_class) redundant ist, würde ich davon absehen.

In meinem Fall wollte ich die IDs der Kategorien in der Klasse verwenden, was zu Klassen führt, die beispielsweise »cat-13« heißen. Auf diese Weise kann ich mit der Liste der Kategorien interagieren, ohne bei neuen Kategorien nochmals an den Code zu müssen.

Es lassen sich natürlich auch die Namen der Kategorien als Klassen ausgeben, dazu wird die Zeile in der die Ausgabe der Klasse bestimmt wird folgendermaßen verändert:

$classes[] = $category->category_nicename;


Die hier geschilderte Idee basiert auf dem Eintrag zur body_class im WordPress-Codex.

3 Reaktionen

  1. Danke für den Hinweis, kannte diese Filter bisher nicht.

    Nur am Rande: Hier in dem Beitrag gibt es ein Darstellungsproblem im PHP-Code, die Pfeile sind verhtmlt (->).

    • Danke für den Formatierungshinweis, dafür zeichnet sich Prism (das Highlighting-Skript) zuständig, und mir fehlte die Zeit dem nachzugehen … werde ich demnächst einen Blick drauf werfen.

Reagiere darauf

*