Wie kann ich HTML-classn für die aktuelle Taxonomie / Begriffshierarchie in meine Seiten einfügen, um Stile zu vereinfachen?

Ich habe versucht, jede dieser Fragen im WordPress-Forum zu veröffentlichen, aber ich bekomme keine Antworten. Hoffentlich kann mir hier jemand helfen.

Frage: Kategorie / Unterkategorie Styling

Ich versuche, alle Überschriften der Kategorien / Unterkategorien auf verschiedene Stile basierend auf der Kategorie der höchsten Ebene zu stylen. Ich finde jedoch keine Möglichkeit, die Unterkategorien zu stylen, ohne sie einzeln aufzulisten. Es sieht momentan so aus:

#content .category-academy-awards .entry-byline, #content .category-academy-awards-history .entry-byline, #content .category-oscar-in-box-office-history .entry-byline, #content .category-oscar-profile .entry-byline, #content .category-this-day-in-oscar-history .entry-byline, #content .category-for-your-consideration .entry-byline, #content .category-screener-watch .entry-byline, #content .category-oscar-preview .entry-byline, #content .category-precursors .entry-byline, #content .category-predictions .entry-byline, #content .category-presenters .entry-byline, #content .category-shortlists .entry-byline { background-color: #c3a310; padding: 5px; border-top: 2px #e3c330 solid; border-bottom: 2px #806b09 solid; border-right: 2px #806b09 solid; border-left: 2px #e3c330 solid; } #content .category-academy-awards .entry-byline a, #content .category-academy-awards-history .entry-byline a, #content .category-oscar-in-box-office-history .entry-byline a, #content .category-oscar-profile .entry-byline a, #content .category-this-day-in-oscar-history .entry-byline a, #content .category-for-your-consideration .entry-byline a, #content .category-screener-watch .entry-byline a, #content .category-oscar-preview .entry-byline a, #content .category-precursors .entry-byline a, #content .category-predictions .entry-byline a, #content .category-presenters .entry-byline a, #content .category-shortlists .entry-byline a { color: #402b09; } #content .category-academy-awards .entry-categories, #content .category-academy-awards-history .entry-categories, #content .category-oscar-in-box-office-history .entry-categories, #content .category-oscar-profile .entry-categories, #content .category-this-day-in-oscar-history .entry-categories, #content .category-for-your-consideration .entry-categories, #content .category-screener-watch .entry-categories, #content .category-oscar-preview .entry-categories, #content .category-precursors .entry-categories, #content .category-predictions .entry-categories, #content .category-presenters .entry-categories, #content .category-shortlists .entry-categories { background-color: #e3c330; padding: -1px; border-top: 1px #f3e350 solid; border-bottom: 1px #806b09 solid; border-right: 1px #806b09 solid; border-left: 1px #f3e350 solid; } #content .category-academy-awards .entry-categories a, #content .category-academy-awards-history .entry-categories a, #content .category-oscar-in-box-office-history .entry-categories a, #content .category-oscar-profile .entry-categories a, #content .category-this-day-in-oscar-history .entry-categories a, #content .category-for-your-consideration .entry-categories a, #content .category-screener-watch .entry-categories a, #content .category-oscar-preview .entry-categories a, #content .category-precursors .entry-categories a, #content .category-predictions .entry-categories a, #content .category-presenters .entry-categories a, #content .category-shortlists .entry-categories a { padding: 4px; } 

Gibt es eine Möglichkeit, den Stil auf die Basis “.category-academy-awards” und alle Unterkategorien zu setzen, oder ist der obige Weg der einzig mögliche Weg?

Solutions Collecting From Web of "Wie kann ich HTML-classn für die aktuelle Taxonomie / Begriffshierarchie in meine Seiten einfügen, um Stile zu vereinfachen?"

Hinweis – Möglicherweise muss ich dies ändern, nachdem Sie mir Feedback gegeben haben.

Der Trick besteht darin, entweder die body_class oder post_class Filter zu verwenden. Ihr Theme (sollte) die body_class function verwenden, um eine Anzahl von classn in Ihr HTML-Tag und die komplementäre post_class function zu post_class , um dasselbe für den Tag zu tun, der Ihren Main-Post-Inhalt umgibt. Mit ihren Filtern können Sie diese classnlisten um alles erweitern, was Sie brauchen.

Da Ihr CSS-Beispiel Selektoren wie #content .category-academy-awards .entry-categories a ich, dass wir über post_class für Ihre Frage sprechen. Die beiden arbeiten genau gleich.

Fangen Sie in Ihrer functions.php-Datei damit an:

 add_filter('post_class','wpse_235350_custom_body_class'); function wpse_235350_custom_body_class( $classes ) { return $classes; } 

Wenn nun WP eine Seite generiert und die function post_class , wird sie auf diese function post_class , wobei die Liste der classn übergeben wird. Dann gibt die function die Liste der classn zurück und WP setzt fort und verwandelt das Array in eine durch Leerzeichen und drängen Sie es in den HTML-Code Ihrer Seite.

Noch nichts schlau, aber jetzt werden wir die function erweitern, so dass sie zu dieser Liste von classn hinzugefügt wird.

Ich gehe davon aus, dass Sie innerhalb der Schleife für jeden Post herausfinden wollen, in welchen Kategorien er sich befindet, und versuchen Sie dann, die Top-Level-Kategorie für jede dieser Kategorien zu finden und diese Top-Level-Kategorie zur Liste der classn hinzuzufügen. Wenn der Beitrag beispielsweise in Kategorievorhersagen enthalten ist predictions wir den Baum hochgehen, um zu finden, dass die Kategorie der höchsten Ebene academy-awards und fügen Sie diese als class dem Post hinzu.

In meiner eigenen Kodierung würde ich wahrscheinlich die Dinge mehr verdichten, als ich hier vorhabe, und weniger temporäre Variablen verwenden, aber das würde zu einer weniger klaren Antwort führen.

Zuerst müssen wir die Kategorien des Posts kennen:

 $categories = get_the_category(); 

Dies gibt ein Array von Kategorienobjekten zurück. Wir werden die Kategorie-IDs aus diesem Array extrahieren:

 if( count( $categories ) ) { // as long as there is at least one category... $catlist = array(); // good to make sure it really is empty to start with foreach( $categories as $category ) { $catlist[] = (int)$category->term_id; // WP gets stroppy if you accidentally fail to use integers, so we co-erce the value here. } } 

Und jetzt werden wir die wirklich geschickten get_ancestors , um alle Vorfahren jeder Kategorie zu finden. get_ancestors wird eine Liste aller Vorfahren eines bestimmten Objekts get_ancestors , egal ob es sich um einen term einen post oder einen comment .

 $fullcatlist = array(); foreach( $catlist as $category ) { $fullcatlist = array_merge( $fullcatlist, get_ancestors( $category, 'category' ) ); } // now $fullcatlist is a one dimensional array of all the ancestors' IDs, possibly with duplicate values, so... $fullcatlist = array_unique($fullcatlist); 

Jetzt lasst uns alle Nacktschnecken holen. Wir erhalten alle Kategorie-Objekte und fügen die Nacktschnecken zu einem Array hinzu, wobei die Zeichenfolge ‘Kategorie-‘ vor jedem für unsere classn bereitsteht.

 $catsluglist = array(); foreach( $fullcatlist as $category ) { $category = get_category( $category ); $catsluglist[] = 'category-' . $category->slug; } 

Und da haben wir es: Eine Liste aller Schnecken aller Vorfahrenkategorien des aktuellen Posts.

Zusammenfassend haben wir folgendes:

 add_filter('post_class','wpse_235350_custom_body_class'); function wpse_235350_custom_body_class( $classes ) { $categories = get_the_category(); if( count( $categories ) ) { // as long as there is at least one category... $catlist = array(); // good to make sure it really is empty to start with foreach( $categories as $category ) { $catlist[] = (int)$category->term_id; // WP gets stroppy if you accidentally fail to use integers, so we co-erce the value here. } } $fullcatlist = array(); foreach( $catlist as $category ) { $fullcatlist = array_merge( $fullcatlist, get_ancestors( $category, 'category' ) ); } // now $fullcatlist is a one dimensional array of all the ancestors' IDs, possibly with duplicate values, so... $fullcatlist = array_unique($fullcatlist); $catsluglist = array(); foreach( $fullcatlist as $category ) { $category = get_category( $category ); $catsluglist[] = 'category-' . $category->slug; } return $classes; } 

Es ist ungetestet und ich bin gerne bereit, beim Debuggen zu helfen. Wo ist mein Glas Wein …

Oh – letztes bisschen. Alle deine Posts sollten jetzt die classnkategorie category-academy-awards haben, wenn dies der Ahnen der obersten Ebene ist, sowie alle dazwischen liegenden Vorfahrenkategorien.