it-swarm.com.de

So erhalten Sie die übergeordnete Kategorie Slug of Current Post

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.

11
DLR

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;
}
15
Rachel Baker

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:

  • Karikatur
    • Hund
      • Scooby

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.

5
s_ha_dum

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

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

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;
0
Jafar Abazeed