Come ottenere lo slug della categoria genitore del post corrente
6 risposta
- voti
-
- 2014-01-25
Dovrai utilizzareil valore ID restituito da
$category[0]->category_parent
e passarlo attraversoget_term()
.Esempio:$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
Sarànecessarioeseguire una queryperi dati della categoriaprincipale.
get_category
èpraticamente costruitoperfarlo.$category = get_the_category(); $parent = get_category($category[0]->category_parent); echo $parent->slug;
Ciò restituiràilgenitoreimmediato della categoria. Questo è dato questoinsieme di categorie:
- Cartone animato
- Cane
- Scooby
- Cane
Il codice sopra restituirà "Dog" segli dai l'ID di "Scooby". Se desideri la categoriaprincipalepiùin alto,"Cartone animato",nonimporta quanto siaprofonda lanidificazione,usa qualcosa delgenere:
$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(); }
Questo ha ancheil vantaggio di unagestione deglierrori relativamente accurata.
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.
-
Grazieper la risposta,e probabilmente userò uno snippet similein futuro,magenera ancheerrori seilpostin una categoria/categoriaprincipale senza sottocategorie.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: Sì,lo so.Ho dovuto andarmeneprima dipoter completare la risposta.Stavo lavorando a qualcosa dipiù complessoe più robusto.Vedi lamodifica.@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
Mipiace la rispostaprecedente di @s_ha_dum,maper ottenere la categoria diprimo livelloindipendentemente dallaprofondità,ho utilizzato quella che considero una soluzionepiù semplice:
$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
Sepuò aiutare qualcuno ... a ottenere ungatto o ungenitorebambino,a seconda di
0
o1
chemetti su$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
Puoi semplificarloin questomodo:
$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
La seguentefunzione è adattataper restituire la categoria root :
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; }
Utilizzo:
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
Ilmiotema ha uno stileper categoria utilizzandoil codice seguente,cheinserisce lo slug della categoria corrente come classe CSS.
Ora stoper aggiungere ungrannumero dinuove sottocategorie,e sembra sciocco aggiungerletuttein CSS quando dovreiesserein grado di selezionare semplicemente la categoriaprincipale delpost correntee applicaregli stili a quella.
Sono riuscito a ottenereilnome della categoriaprincipale:
Magli spazi (e lemaiuscole) sono unproblema ...e non riesco a ottenere lo slug della categoriaprincipale.
So cheprobabilmentemi stoperdendo un semplicepassaggio da qualcheparte,ma qualsiasiintuizione sarebbemolto apprezzata.