geschrieben von Micha am 10. Februar 2009 | 25 Kommentare
body_class
In der kommenden Version 2.8 von WordPress wird es einen neuen Template Tag geben, body_class. Diese Funktion gibt dem body Element verschiedene Klassen, die einem die Möglichkeit geben, per CSS darauf zuzugreifen.
<body <?php body_class(); ?>>
Wie schon bei der Kommentar-Ausgabe und bei den Postklassen fahren die WordPress-Entwickler alles auf, was die Datenbank hergibt. Hier ein Beispiel beim Aufruf eines Seitentemplates “tutorial.php”:
<body class="page-template page-template-tutorial-php logged-in">
Insgesamt stehen uns folgende Klassen zur Verfügung:
- rtl
- home
- blog
- archive
- date
- search
- paged
- attachment
- error404
- single postid-(id)
- attachmentid-(id)
- attachment-(mime-type)
- author
- author-(user_nicename)
- category
- category-(slug)
- tag
- tag-(slug)
- page-parent
- page-child parent-pageid-(id)
- page-template page-template-(template Dateiname)
- search-results
- search-no-results
- logged-in
- paged-(seitenzahl)
- single-paged-(seitenzahl)
- page-paged-(seitenzahl)
- category-paged-(seitenzahl)
- tag-paged-(seitenzahl)
- date-paged-(seitenzahl)
- author-paged-(seitenzahl)
- search-paged-(seitenzahl)
automatic_feed_links
Diese Funtion befindet sich zur Zeit in der function.php des Default-Theme. automatic_feed_links() ermöglicht die automatische Ausgabe der Feedlinks im head-Bereich des Dokuments. Per defalut ist die Funktion aktiv, man kann sie auch abschalten, dann werden keine Feed-Links ausgegeben:
automatic_feed_links(false);//keine Ausgabe
automatic_feed_links();//Ausgabe
Ausgegeben werden der Feed, der Kommentar-Feed und zusätzlich der Beitrag-Kommentar-Feed, wenn man auf einer Einzelansicht ist.

wtf?
was soll ich mit sovielen Klassen im Body? Ich find die Verwendung einer ID oder einer Klasse im Body sowieso etwas “mies” und musste es bisher auch erstmal einmal verwenden.
Fluch oder Segen?! Könnte man auch hier fragen…
Generell mies würde ich nicht sagen, man braucht das schon manchmal. Nur diese sinnlose Masse finde ich bescheuert. Was will ich mit den ganzen paged-Zeugs?
Obwohl bei search-no-results fallen mir ein Haufen witziger Sachen ein
Bestimmt kann man mit der ein oder anderen Klasse was witziges und sinnvolles anstellen aber ich finde es sehr verwirrend wenn man Body komplett zukleistert.
Ist es nicht effektiver wenn man einen Kompromiss zwischen “CSS Include” mithilfe Custom Fields UND einigen wenigen Formatierungen der Seiten mithilfe der Body Klasse findet?
Wenn ich eine komplette Seite verändern will, binde ich eine extra CSS NUR auf der Seite ein – das macht meine Haupt-CSS schlanker
Mit dem zukleistern gebe ich dir vollkommen Recht.
Wenn man es selbst anwendet, egal in welcher Form, weiß man (meistens), was man tut und bekommt es nicht aufgezwungen bzw. geht sparsam damit um.
Das stimmt
Ich hab da mehr an freie Themes gedacht die darauf aufbauen werden und bei denen dann die CSS mehr 40kb groß sein wird.
Nicht jeder macht sich soviel Arbeit wie du und baut einen Compressor ein!
Kommentar beim selben Artikel auf wpengineer.com:
Dann bau ich doch gleich noch eine Klasse mit der IP des Users ein…
Lieber Gott, lass es Hirn regnen!
^^ ich wusste schon warum ich mich nach einer 3minütigen Durchsicht des besagten “Frameworks” dann doch wieder für das Basic Theme vom Frank entschieden habe!!
Die Funktion body_class() ist sinnvoll. Keine CSS Datei wird dadurch automatisch größer.
Ein Theme KANN so z.B. das Headerbild ganz einfach entsprechend der gewählten Seite anpassen.
Darüber hinaus ist es ebenfalls sinnvoll, dass nicht jedes Theme eigene Klassennamen und IDs nutzt. So ist es leichter, das eigene Design auf ein anderes Themeframework zu übertragen.
@Kretschmar:
Das CSS wird dadurch nicht größer, wohl aber der HTML Quelltext. Was mich stört, ist das einfach draufgeblasen wird, ohne nachzudenken, ebenso wie bei post_class() und den Kommentaren.
Wenn ich en Theme erstelle, dann nutze ich diese technik auch, wenn es erforderlich ist, nur dann komm ich im body mit einer Klasse auch und brauche nicht so einen Schwachsinn wie logged-in oder der ganze paged- Kram.
Zu jedem Theme kann man mittlerweile eigene Child-Themes erstellen, die automatisch von Verbesserungen des Basis-Themes profitieren. Hier sehe ich die vielen Klassen als echte Bereicherung, da nur in wirklich seltenen Ausnahmefällen Tempalte-Dateien verändert werden müssen.
Außerdem sind die Klassennamen jetzt standardisiert, sodass sich eigene Änderungen auch auf andere Themes leicht übertragen lassen und nur wenige Änderungen am Styleheet erfordern.
Für die meisten Nutzer macht der aufgebähte HTML-Code keinen Unterschied, da sie sich nie den Quell-Code anschauen es den Seitenaufbau praktisch nicht beeinträchtigt.
Das Gute an den neuen Funktionen ist aber auch, dass es Funktionen sind. Wenn ein Theme-Autor sie nicht nutzen möchte, kann er sie weglassen.
Das ist wohl war.
Hallo, eine Frage habe ich dazu. Ich spiele gerade mit WordPress und Yaml rum und habe jetzt folgendes Problem:
body class=”page page-id-2 logged-in”
würde gern die Funktion body_class nutzen, aber Yaml nutzt class=”page in den Core-Dateien und die wollte ich nicht bearbeiten. Kann ich das Problem irgendwie umgehen?
Christoph: Da gibt es nur 2 Möglichkeiten:
1. Du benutzt body_class() nicht
2. Du benennst den Container .page um und kopierst dir alles aus den YAML Core Dateien, was mit .page zu tun hat, in ein eigenes Sytlesheet und benennst ebenfalls alles um. IE Patch nicht vergessen.
Das ist alles nicht wirklich schön, aber so ist das nun malmit Content Management Systemen.
Was ich mich immer noch frage: Wie funktioniert das ganze? Denn der user_nicename des Autors will ums Verrecken nicht erscheinen.
Chris: Zeile 481 wp-includes/post-template.php:
elseif ( is_archive() ) {
if ( is_author() ) {
$author = $wp_query->get_queried_object();
$classes[] = 'author';
$classes[] = 'author-' . sanitize_html_class($author->user_nicename , $author->user_id);
Also nur, wenn es eine author Seite ist.
Ah, ok…. Dann hab ich das anscheinend falsch verstanden. Denn ich dachte, dass setzt den Autorennamen der Seite ein, der dieser Seite zugeteilt ist.
Ich wollte nämlich den Body über verschiedene CSSs vom Autor abhängig machen.
Dann funktioniert das leider nicht so, wie ich mir das vorgestellt habe.
Trotzdem danke für deine Mühe, Micha.
Dieser Artikel bezieht sich ja auf die Version 2.8 – ich hab aber noch Blogs, die mit dieser Engine von WP laufen und da bin ich froh. dass ich für dieses Problem jetzt mal eine Lösung gefunden hab. Ist nämlich gar nicht so einfach, zu älteren WP Sachen was gutes im Netz zu finden!