Quando manipoliamo il codice di WordPress, spesso ci è necessario recuperare il nome della categoria. Questo può capitare se siamo all’interno di un articolo oppure all’interno di una sottocategoria: in quest’ultimo caso, generalmente, ci preme soprattutto recuperare l’id della categoria padre (ed eventualmente il suo nome).
Iniziamo con ordine e vediamo come lavorare con le categorie. Ci sarà utile per comprendere le dinamiche dell’esempio finale.
Recuperare nome della categoria conoscendo il suo id
Se andate nel pannello di amministrazione, nel menu Articoli => Categorie troverete la lista delle categorie. Portatevi sopra alla categoria voluta con il mouse e troverete l’id della categoria (identificata dal get tag_ID).
Avendo a disposizione l’id della categoria, a questo punto possiamo recuperare tutti i riferimenti della categoria. Nel nostro caso, stamperemo il nome della categoria:
1 2 3 |
$category = &get_category($id); $category_name=$category->slug; echo $category_name; |
Recuperare l’id di una categoria padre
Facciamo un passo in più. Se la categoria in cui siamo è, in realtà, una sottocategoria, possiamo entrare nella categoria e recuperare l’id della categoria padre con il seguente codice:
1 2 3 4 5 |
if( is_category() ) { $q_cat = get_query_var('cat'); $cat = get_category( $q_cat ); echo $cat->category_parent; // Print the ID } |
Recuperare i nomi delle categorie padri di una categoria
Adesso analizziamo un caso più complesso. Mettiamo di trovarci all’interno di un articolo. L’articolo si trova all’interno di una sottocategoria: quello che vogliamo fare è recuperare i riferimenti a tutte le categorie padre di quella sottocategoria.
Come punto di partenza, WordPress ci mette a disposizione l’id del post tramite un oggetto di classe sempre recuperabile, ovvero $post->ID.
Ecco il codice per recuperare i nomi delle categorie padri della categoria a cui l’articolo appartiene:
1 2 3 4 5 6 7 8 9 10 11 12 |
//array che contiene gli id di tutte le categorie a cui il post è associato $category_array=wp_get_post_categories($post->ID); //per ogni id categoria, stampo la sua categoria padre foreach($category_array as $value){ $attuale=get_category($value); //oggetto di riferimento alla categoria con id=$value $categoria_padre=$attuale->category_parent; //id categoria padre echo $categoria_padre; } |
Semplicemente, grazie alla funzione wp_get_post_categories() abbiamo estratto (e messo in un array) gli id di tutte le categorie dell’articolo. Per ognuna di queste, abbiamo recuperato i riferimenti alla categoria padre e abbiamo stampato il suo nome.
Naturalmente potremmo formattare il risultato a nostro piacimento, ma l’esempio è utile per capire come funziona.
Ciao, stavo leggendo questo articolo che probabilmente fa al caso mio… ma non riesco a capire come interagire con la mia parte di codice.
la mia funzione per ora ha questo codice:
$code = ”;
$args = array(
‘post_type’ => ‘player’,
//’taxonomy’ => ‘team’, categoria madre
‘orderby’ => ‘meta_value’,
‘posts_per_page’ => -1,
‘meta_key’ => ‘player_position’,
‘order’ => ‘ASC’
);
query_posts($args);
while(have_posts()) : the_post();
global $post;
$player_position = get_post_meta($post->ID, ‘player_position’, true);
$player_fact_val_1 = get_post_meta($post->ID, ‘player_facts_value__1′, true);
$code .= ”;
$code .= ”.$player_position.’
‘.get_the_title().’
‘.$player_fact_val_1.’
xxxx’;
$code .= ‘ID).'”>
‘;
endwhile; wp_reset_query();
return $code;
/*——————————————————*/
Al posto di xxx, avrei bisogno di stampare il termine ‘name’ che viene recuperato dalla tabella terms, quindi la categoria di appartenenza per ogni singolo ciclo.
Cosa ne dici?
Grazie infinite
Ciao Simone,
usa l’ultimo script di questo articolo (“recuperare i nomi delle categorie padri di una categoria”). Ti stampa tutte le categorie di una post.
L’unica parte che devi cambiare è sostituire “->category_parent” con “->name”
Grazie per la tua celere risposta, a parte che mi sono accorto che il post ha eliminato parte di codice che aveo incollato…
Si, era proprio quello che ho usato, ma non mi mostra nulla a video.
Sbaglio forse la posizione in cui lo inserisco?
Ho inserito il tuo script dopo la mia riga
$player_fact_val_1 = get_post_meta($post->ID, ‘player_facts_value__1’, true);
e stampo la stringa al posto di xxx mettendo quindi
‘.$categoria_padre.’;
avendo a priori modificato $categoria_padre=$attuale->name;
Quindi mi mostra sempre i miei dati ma il campo categoria è sempre vuoto.
Prova a controllare se $post->ID è definito, prima di creare $category_array. Stampalo a video e vedi se ti butta fuori l’id dell’articolo: in caso contrario vuol dire che è stato sovrascritto in qualche modo
Ciao Manuel, ci sono riuscito.
Ho solo problemi con l’orderby.
io ho più voci con stesso ID nel campo meta_value (ad esempio):
– oggetti
– colori
– dimensioni
vengono ordinati per oggetti, ma vorrei ordinarli per colori.
Grazie mille.
Guarda questo link, probabilmente fa a caso tuo:
http://wordpress.stackexchange.com/questions/15477/custom-query-with-orderby-meta-value-of-custom-field
Perfetto,
grazie mille!!