So erhalten Sie übergeordnete Kategorie Slug des aktuellen Beitrags

12

Mein Thema ist nach Kategorien mit dem folgenden Code gestaltet, 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 werde ich eine große Anzahl neuer Unterkategorien hinzufügen, und es scheint albern, sie alle in CSS hinzuzufügen, wenn ich in der Lage sein sollte, einfach die übergeordnete Kategorie des aktuellen Beitrags auszuwählen und darauf Stile anzuwenden.

Ich konnte den Namen der übergeordneten Kategorie ermitteln:

$parentcat = get_cat_name($category[0]->category_parent);

Aber Leerzeichen (und Großschreibung) sind ein Problem ... Und ich kann anscheinend nicht die Schnecke der übergeordneten Kategorie verstehen.

Ich weiß, dass mir wahrscheinlich irgendwo ein einfacher Schritt fehlt, aber jeder Einblick wäre sehr dankbar.

DLR
quelle

Antworten:

18

Sie müssen den von zurückgegebenen ID-Wert verwenden $category[0]->category_parentund ihn weitergeben get_term(). 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;
}
Rachel Baker
quelle
5

Sie müssen die übergeordneten Kategoriedaten abfragen. get_categoryist so ziemlich dafür gebaut.

$category = get_the_category(); 
$parent = get_category($category[0]->category_parent);
echo $parent->slug;

Dadurch wird das unmittelbare übergeordnete Element der Kategorie zurückgegeben. Das ist diese Reihe von Kategorien gegeben:

  • Karikatur
    • Hund
      • Scooby

Der obige Code gibt "Dog" zurück, wenn Sie ihm die ID für "Scooby" geben. Wenn Sie die oberste übergeordnete Kategorie - "Cartoon" - 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 ordentlichen Fehlerbehandlung.

s_ha_dum
quelle
Vielen Dank für die Antwort, und ich werde wahrscheinlich in Zukunft ein ähnliches Snippet verwenden, aber es wirft auch Fehler auf, wenn der Beitrag in einer übergeordneten Kategorie / Kategorie ohne Unterkategorien.
DLR
@ DLR: Ja, ich weiß. Ich musste gehen, bevor ich die Antwort vervollständigen konnte. Ich habe an etwas Komplexerem und Robusterem gearbeitet. Siehe die Bearbeitung.
s_ha_dum
0

Ich mag die vorherige Antwort von @s_ha_dum, aber um die Kategorie der obersten Ebene unabhängig von der Tiefe zu erhalten, habe ich eine meiner Meinung nach einfachere Lösung verwendet:

$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
scott8035
quelle
0

Wenn es jemandem helfen kann ... Kinderkatze oder Eltern zu bekommen, je nachdem 0oder ob 1Sie das anziehen$category

$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';
}
TikTakTikTak
quelle
0

Sie können es folgendermaßen vereinfachen:

  $category   = get_the_category();
  $cat_parent = $category[0]->category_parent;
  $category   = $cat_parent != 0 ? get_term($cat_parent, 'category')->slug : $category[0]->slug;
Jafar verblüfft
quelle
0

Die folgende Funktion ist angepasst, um die Stammkategorie zurückzugeben :

function get_root_category($category = null) {
  if (!$category) $category = get_the_category()[0];
  $ancestors = get_ancestors($category->term_id, 'category');
  if (empty($ancestors)) return $category;
  $root = get_category(array_pop($ancestors)); 
  return $root;
}

Verwendung: get_root_category()->slug

Zane Claes
quelle