Comment obtenir le slug de catégorie parent du message actuel
6 réponses
- votes
-
- 2014-01-25
Vous devrez utiliser la valeur d'ID renvoyéepar
$category[0]->category_parent
et latransmettre viaget_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; }
You will need to use the ID value returned by
$category[0]->category_parent
and pass it throughget_term()
. Example:$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; }
-
- 2014-01-25
Vous devrez rechercher les données de la catégorieparente.
get_category
est àpeuprès conçupour cela.$category = get_the_category(); $parent = get_category($category[0]->category_parent); echo $parent->slug;
Cela renverra leparentimmédiat de la catégorie. Cela donne cetensemble de catégories:
- Dessin animé
- Chien
- Scooby
- Chien
Le code ci-dessus renverra "Dog" si vous lui donnez l'ID de "Scooby". Si vous voulez la catégorieparente laplus élevée - "Cartoon" - quelle que soit laprofondeur 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(); }
Celaprésente également l'avantage d'unegestion deserreurs relativement soignée.
You will need to query for the parent category data.
get_category
is pretty much built for doing that.$category = get_the_category(); $parent = get_category($category[0]->category_parent); echo $parent->slug;
That will return the immediate parent of the category. That is given this set of categories:
- Cartoon
- Dog
- Scooby
- Dog
The code above will return "Dog" if you give it the ID for "Scooby". If you want the topmost parent category-- "Cartoon"-- no matter how deep the nesting, use something like this:
$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(); }
That also has the advantage of relatively neat error handling.
-
Mercipour la réponse,et j'utiliseraiprobablement unextrait similaire à l'avenir,mais celagénère également deserreurs si lemessageest dans une catégorie/catégorieparente sans sous-catégories.Thanks for the answer, and i'll likely use a similar snippet in the future, but it also throws errors if the post in a parent category / category without subcategories.
- 0
- 2014-01-26
- DLR
-
@DLR: Oui,je sais.J'ai dûpartir avant depouvoir compléter la réponse.Jetravaillais sur quelque chose deplus complexeet deplus robuste.Voir lamodification.@DLR: Yes, I know. I had to leave before I could complete the answer. I was working on something more complex and more robust. See the edit.
- 0
- 2014-01-26
- s_ha_dum
-
- 2018-12-05
J'aime la réponseprécédente de @s_ha_dum,maispour obtenir la catégorie depremierniveau quelle que soit laprofondeur,j'ai utilisé ce queje considère comme une solutionplus 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
I like the previous answer from @s_ha_dum, but for getting the top-level category regardless of depth, I used what I consider to be a simpler solution:
$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
-
- 2019-03-22
Si celapeut aider quelqu'un ... à obtenir unenfant chat ouparent,selon le
0
ou le1
que vousmettez sur le$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'; }
If it can help somebody... to get child cat or parent, depending on the
0
or1
you put on the$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'; }
-
- 2019-06-11
Vouspouvez le simplifier comme ceci:
$category = get_the_category(); $cat_parent = $category[0]->category_parent; $category = $cat_parent != 0 ? get_term($cat_parent, 'category')->slug : $category[0]->slug;
You can simplify it like this:
$category = get_the_category(); $cat_parent = $category[0]->category_parent; $category = $cat_parent != 0 ? get_term($cat_parent, 'category')->slug : $category[0]->slug;
-
- 2020-01-21
Lafonction suivanteest adaptéepour renvoyer la catégorie racine :
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; }
Utilisation:
get_root_category()->slug
The following function is adapted to return the root category:
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; }
Usage:
get_root_category()->slug
Monthème a un stylepar catégorieen utilisant le code suivant,quiinsère le slug de la catégorie actuelleen tant que classe CSS.
Maintenant,je suis sur lepoint d'ajouter ungrandnombre denouvelles sous-catégories,et il semble ridicule de les ajoutertoutesen CSS alors queje devrais êtreen mesure de sélectionner simplement la catégorieparente dumessage actuelet d'y appliquer des styles.
J'aipu obtenir lenom de la catégorieparente:
Mais lesespaces (et lesmajuscules) sont unproblème ... Etje n'arrivepas à obtenir le slug de la catégorieparente.
Je sais queje manqueprobablement une étape simple quelquepart,maistouteidée seraitgrandement appréciée.