Comment faire pour obtenir la catégorie parent Slug of Current Post

11

Mon thème est stylisé par catégorie à l'aide du code suivant, qui insère le slug de la catégorie en cours en tant que classe CSS.

<div class="CategorySpecificStyle 
    <?php $category = get_the_category(); echo $category[0]->slug; ?>">
        <?php echo $category[0]->cat_name; ?>
</div> 

Maintenant, je suis sur le point d'ajouter un grand nombre de nouvelles sous-catégories, et il semble ridicule de toutes les ajouter en CSS alors que je devrais pouvoir simplement sélectionner la catégorie parente de la publication en cours et y appliquer des styles.

J'ai pu obtenir le nom de la catégorie parente:

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

Mais les espaces (et la capitalisation) sont un problème ... Et je n'arrive pas à obtenir le slug de la catégorie parente.

Je sais qu'il me manque probablement une étape simple quelque part, mais toute idée serait grandement appréciée.

    
posée DLR 25.01.2014 - 22:40

3 réponses

15

Vous devrez utiliser la valeur d'ID renvoyée par $category[0]->category_parent et la transmettre à get_term() . Exemple:

$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;
}
    
réponse donnée Rachel Baker 25.01.2014 - 23:28
5

Vous devrez interroger les données de la catégorie parent. get_category est conçu pour cela.

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

Cela retournera le parent immédiat de la catégorie. Cela est donné à cet ensemble de catégories:

  • dessin animé
    • Chien
      • Scooby

Le code ci-dessus renverra "Chien" si vous lui donnez l'identifiant "Scooby". Si vous voulez que la catégorie parente la plus haute - "Cartoon" - peu importe la profondeur de l'imbrication, utilisez quelque chose comme ceci:

$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();
}

Cela présente également l’avantage d’une gestion des erreurs relativement soignée.

    
réponse donnée s_ha_dum 25.01.2014 - 23:22
0

J'aime la réponse précédente de @s_ha_dum, mais pour obtenir la catégorie de niveau supérieur quelle que soit la profondeur, j'ai utilisé ce que je considère être une solution plus simple:

$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
    
réponse donnée scott8035 05.12.2018 - 19:04

Lire d'autres questions sur les étiquettes