Come ottenere la categoria dall'ID di un prodotto?
Ho l'ID
di un prodotto (1345
), come posso ottenere il nome della categoria di quello specifico prodotto?
Ho provato
$post_categories = wp_get_post_categories( $post->ID );
print_r( $post_categories );
ma viene mostrato:
Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( )
Cosa significa questo?
Grazie
Opzione #1
Ottieni tutte le categorie di prodotti (product_cat) utilizzando questa funzione
global $product;
$terms = get_the_terms( $product->get_id(), 'product_cat' );
Opzione #2 Se hai solo bisogno degli ID, puoi ottenere tutti gli ID delle categorie di prodotti associati a un prodotto specifico, utilizzando questa funzione:
global $product;
$product_cats_ids = wc_get_product_term_ids( $product->get_id(), 'product_cat' );
Extra
Se vuoi visualizzare - ad esempio - i nomi delle categorie, hai bisogno dell'oggetto term della categoria. Questo può essere recuperato utilizzando get_term_by()
.
Un esempio:
foreach( $product_cats_ids as $cat_id ) {
$term = get_term_by( 'id', $cat_id, 'product_cat' );
echo $term->name;
}

Dato che la domanda è contrassegnata con woocommerce, presumo che si tratti di un CPT prodotto creato dal plugin WordPress WooCommerce. Questa risposta non si applica se non è questo il caso.
Le categorie dei prodotti non sono categorie normali, sono una tassonomia personalizzata creata specificamente per i prodotti che è semplicemente etichettata come "Categorie".
Dovresti consultare la documentazione di WooCommerce per trovare qualche funzione che faccia questo per te, se non trovi nulla puoi provare una soluzione alternativa. Per farlo, prima dovresti conoscere il nome della tassonomia. Puoi copiarlo dall'URL nel tuo browser quando visiti la schermata di modifica delle categorie nel backend. Quindi puoi usare wp_get_post_terms
per ottenere i termini.

Ciao, grazie per la tua risposta. E sì, è un prodotto WooCommerce in WordPress. Ok, lo proverò, quali sono i $args per wp_get_post_terms? Vedo che "taxonomy" e "args" sono opzionali, quindi proverò solo con l'ID.

Non funzionerà solo con l'ID. La tassonomia predefinita è post_tag
. Devi passare il nome della tassonomia lì. Funzionerà senza $args
ma puoi usarlo se vuoi. Serve per sovrascrivere le impostazioni predefinite come spiegato su questa pagina

Ho provato ma non mostra la categoria in cui si trova il prodotto. Ho usato questo, <?php $term_list = wp_get_post_terms(1345, 'product_tag', array("fields" => "all")); print_r($term_list); ?>

restituisce questo: Array ( [0] => stdClass Object ( [term_id] => 104 [name] => new [slug] => new [term_group] => 0 [term_taxonomy_id] => 104 [taxonomy] => product_tag [description] => Hola qué tal esto es una descripción? [parent] => 0 [count] => 8 ) ) Array ( [0] => stdClass Object ( [term_id] => 104 [name] => new [slug] => new [term_group] => 0 [term_taxonomy_id] => 104 [taxonomy] => product_tag [description] => Hola qué tal esto es una descripción? [parent] => 0 [count] => 8 ) )

E non c'è nessuna categoria nell'array? Ho fatto qualcosa di sbagliato?

Ho risposto da solo alla mia domanda, questo funziona per me:
<?php
// Ottiene la lista dei termini della tassonomia 'product_cat' per il prodotto specificato
$term_list = wp_get_post_terms($id_product,'product_cat',array('fields'=>'ids'));
// Prende il primo ID di categoria dalla lista
$cat_id = (int)$term_list[0];
// Restituisce il link alla categoria
echo get_term_link ($cat_id, 'product_cat');
?>
Grazie Mridul Aggarwal per il tuo aiuto

Potresti almeno votare positivamente la risposta di Mridul, se non pensi che sia abbastanza completa per essere accettata come corretta. Chiaramente ti ha messo sulla strada giusta.

<?php
// Ottiene i termini della tassonomia 'product_cat' per il prodotto corrente
$terms = get_the_terms($product->ID, 'product_cat');
// Cicla attraverso ogni termine
foreach ($terms as $term) {
// Assegna il nome della categoria del prodotto
$product_cat = $term->name;
// Stampa il nome della categoria
echo $product_cat;
// Interrompe il ciclo dopo la prima iterazione
break;
}
?>

Ottieni tutte le categorie di prodotti (product_cat) e visualizzale
global $product;
$product_cats_ids = wc_get_product_term_ids( $product->get_id(), 'product_cat' );
foreach( $product_cats_ids as $cat_id ) {
$term = get_term_by( 'id', $cat_id, 'product_cat' );
echo $term->name;
}
