Mein Thema ist nach Kategorien gestylt, wobei der folgende Code verwendet wird, der den Slug der aktuellen Kategorie als CSS-Klasse einfügt.
<div class="CategorySpecificStyle
<?php $category = get_the_category(); echo $category[0]->slug; ?>">
<?php echo $category[0]->cat_name; ?>
</div>
Jetzt bin ich dabei, eine große Anzahl neuer Unterkategorien hinzuzufügen, und es erscheint albern, sie alle in CSS hinzuzufügen, wenn ich in der Lage sein sollte, nur die übergeordnete Kategorie des aktuellen Beitrags auszuwählen und Stile darauf anzuwenden.
Ich konnte den Namen der übergeordneten Kategorie abrufen:
$parentcat = get_cat_name($category[0]->category_parent);
Aber Leerzeichen (und Groß- und Kleinschreibung) sind ein Problem ... Und ich kann die übergeordnete Kategorie scheinbar nicht verstehen.
Ich weiß, dass ich wahrscheinlich irgendwo einen einfachen Schritt verpasse, aber jede Einsicht wäre sehr dankbar.
Sie müssen den von $category[0]->category_parent
zurückgegebenen ID-Wert verwenden und ihn durch get_term()
übergeben. Beispiel:
$category = get_the_category();
$category_parent_id = $category[0]->category_parent;
if ( $category_parent_id != 0 ) {
$category_parent = get_term( $category_parent_id, 'category' );
$css_slug = $category_parent->slug;
} else {
$css_slug = $category[0]->slug;
}
Sie müssen die Daten der übergeordneten Kategorie abfragen. get_category
ist so ziemlich dafür gebaut.
$category = get_the_category();
$parent = get_category($category[0]->category_parent);
echo $parent->slug;
Das wird das unmittelbare Elternteil der Kategorie zurückgeben. Das ist diese Reihe von Kategorien gegeben:
Der obige Code gibt "Dog" zurück, wenn Sie die ID für "Scooby" angeben. Wenn Sie die oberste übergeordnete Kategorie - "Cartoon" - haben möchten, egal wie tief die Verschachtelung ist, verwenden Sie Folgendes:
$category = get_the_category();
$parent = get_ancestors($category[0]->term_id,'category');
if (empty($parent)) {
$parent[] = array($category[0]->term_id);
}
$parent = array_pop($parent);
$parent = get_category($parent);
if (!is_wp_error($parent)) {
var_dump($parent);
} else {
echo $parent->get_error_message();
}
Das hat auch den Vorteil einer relativ übersichtlichen Fehlerbehandlung.
Wenn es jemandem helfen kann ... Kind, Katze oder Eltern zu bekommen, abhängig von dem 0
oder 1
, den Sie auf den $category
gesetzt haben
$category = get_the_category();
$parent = get_cat_name( $category[0]->category_parent );
if( ! function_exists('get_cat_slug') )
{
function get_cat_slug($cat_id) {
$cat_id = (int) $cat_id;
$category = &get_category($cat_id);
return $category->slug;
}
}
if ( !empty($parent) ) {
$output .= '<H2>' . esc_html( $category[1]->name ) . '</H2>';
} else {
$output .= '<H2>' . esc_html( $category[0]->name ) . '</H2';
}
Ich mag die vorherige Antwort von @s_ha_dum, aber um die oberste Kategorie unabhängig von der Tiefe zu erhalten, habe ich das verwendet, was ich für eine einfachere Lösung halte:
$cats = get_the_category();
foreach ( $cats as $cat ) {
if ( $cat->category_parent == 0 ) {
return $cat->name; // ...or whatever other attribute/processing you want
}
}
return ''; // This was from a shortcode; adjust the return value to taste
Sie können es so vereinfachen:
$category = get_the_category();
$cat_parent = $category[0]->category_parent;
$category = $cat_parent != 0 ? get_term($cat_parent, 'category')->slug : $category[0]->slug;