Come ottenere le categorie figlie di un articolo specifico

20 ott 2011, 21:48:11
Visualizzazioni: 18.6K
Voti: 2

Come posso ottenere i nomi delle categorie figlie di un articolo arbitrario?

Ad esempio ho uno slug di categoria - 'motociclette' e ho delle sottocategorie per essa. Quindi ho bisogno di ottenere il nome della sottocategoria di ogni articolo che si trova all'interno della categoria con slug motociclette. Y2ok

5
Commenti

Puoi spiegare la rilevanza del fatto che lo slug della categoria cambi, rispetto alla questione che riguarda semplicemente l'ottenere le categorie figlie di una categoria genitore?

Chip Bennett Chip Bennett
20 ott 2011 22:08:07

Ciao, normalmente lo slug della categoria è 'category', ma nel mio caso è 'motorbikes', e all'interno dello slug della categoria 'motorbikes' ho delle sottocategorie. Nelle sottocategorie ho dei post, e ho bisogno di ottenere il nome della sottocategoria con $cat = get_the_category($post->ID); $category_name = $cat->name; , ma non ci riesco perché restituisce un array vuoto.

Y2ok Y2ok
20 ott 2011 22:18:34

Ancora non capisco. Cosa intendi con "normalmente lo slug della categoria è 'category'"? Stai forse parlando della base URL della categoria?

Chip Bennett Chip Bennett
20 ott 2011 22:30:24

Ciao, sì esattamente.

Y2ok Y2ok
20 ott 2011 22:32:41

Umm... questo è diverso dal tuo commento qui sotto. Quindi, a meno che la mia risposta modificata non risponda alla tua domanda, sono ancora confuso su ciò di cui hai bisogno.

Chip Bennett Chip Bennett
20 ott 2011 22:41:49
Tutte le risposte alla domanda 2
8
12

Per ottenere le categorie figlie di una determinata categoria genitore tramite slug, utilizza una combinazione delle funzioni get_category_by_slug() e get_categories().

La seconda funzione restituirà un array di oggetti categoria che corrispondono agli argomenti della query specificata; la prima restituirà l'ID di una categoria dato il suo slug.

Ad esempio:

<?php
$motorbike_child_cat_args = array(
    'child_of' => get_category_by_slug( 'motorbikes' )
);

$motorbike_child_cats = get_categories( $motorbike_child_cat_args );
?>

Successivamente, puoi fare ciò che vuoi con il tuo array di oggetti categoria. Ad esempio, per ottenere un array di nomi delle categorie figlie:

<?php
$motorbike_child_cat_names = array();
foreach ( $motorbike_child_cats as $child_cat ) {
    $motorbike_child_cat_names[] = $child_cat->name;
}
?>

In effetti, a quel punto sta a te decidere cosa farne.

MODIFICA

Se hai bisogno di ottenere le categorie figlie di un post arbitrario, puoi usare get_the_category().

Se sei all'interno del Loop, basta chiamare get_the_category(); se sei all'esterno del Loop, devi passare l'ID del Post alla chiamata: get_the_category( $id ).

Ad esempio, per costruire un array di nomi delle categorie figlie (indipendentemente dal genitore) del post corrente:

<?php
$my_post_categories = get_the_category();

$my_post_child_cats = array();
foreach ( $my_post_categories as $post_cat ) {
    if ( 0 != $post_cat->category_parent ) {
        $my_post_child_cats[] = $post_cat->cat_name;
    }
}
?>

Oppure, ad esempio, per costruire un array di nomi delle categorie figlie di 'motorbikes' del post corrente:

<?php
$my_post_categories = get_the_category();

$motorbikes_child_cats = array();
foreach ( $my_post_categories as $post_cat ) {
    if ( 'motorbikes' == $post_cat->category_parent ) {
        $motorbikes_child_cats[] = $post_cat->cat_name;
    }
}
?>

È più simile a quello che stavi cercando?

MODIFICA 2

Se hai solo bisogno di ottenere tutte le categorie del tuo post:

<?php
$all_post_categories = get_the_category();

$my_post_cats = array();
foreach ( $my_post_categories as $post_cat ) {
    $my_post_cats[] = $post_cat->cat_name;
}
?>

Questo ti darà tutte le categorie per il Post corrente. Non ho idea di come lo slug della categoria motorbikes sia rilevante in questa domanda.

20 ott 2011 22:16:37
Commenti

Ciao, grazie, ma come posso ottenere il nome della sottocategoria di $post->ID, dato che $cat = get_the_category($post->ID); $category_name = $cat->name; non funziona?

Y2ok Y2ok
20 ott 2011 22:23:08

Quindi, stai cercando di ottenere le categorie figlie di un post arbitrario, piuttosto che le categorie figlie di una categoria nota, 'motociclette'?

Chip Bennett Chip Bennett
20 ott 2011 22:33:08

Ciao, sì, potresti aiutarmi con questo?

Y2ok Y2ok
20 ott 2011 22:36:56

Vedi la risposta modificata.

Chip Bennett Chip Bennett
20 ott 2011 22:40:22

Ciao, sì ma come posso visualizzarlo? Se faccio qualcosa come questo - echo $motorbikes_child_cats[0]; oppure echo $my_post_child_cats[0]; verrà visualizzato vuoto.

Y2ok Y2ok
20 ott 2011 22:46:40

Cosa ottieni con <?php var_dump( $my_post_child_cats ); ?>? Se è vuoto, sei sicuro che il tuo post abbia effettivamente delle categorie figlie?

Chip Bennett Chip Bennett
20 ott 2011 22:49:45

Ciao, restituisce NULL, quindi significa che non ho sottocategorie? Se è così, come posso ottenere il nome della categoria per il mio post, se lo slug della categoria è 'motorbikes'?

Y2ok Y2ok
20 ott 2011 22:55:49

Puoi spiegarmi da dove diavolo viene "lo slug della categoria è 'motorbike'"?

Chip Bennett Chip Bennett
20 ott 2011 22:57:35
Mostra i restanti 3 commenti
1
$categories = wp_get_post_categories( get_the_ID(), array('fields' => 'ids') );

$arguments = array(
    'taxonomy'    => 'category', // Tassonomia delle categorie
    'childless'   => true, // Ottieni solo categorie senza figli
    'include'     => $categories, // Includi solo le categorie specificate
);

$selected_category = get_terms( $arguments ); // Recupera i termini in base agli argomenti
28 lug 2016 21:40:36
Commenti

Per favore modifica la tua risposta e aggiungi una spiegazione: perché potrebbe risolvere il problema? Vedi [risposta]

fuxia fuxia
28 lug 2016 21:58:37