Come ottenere la categoria dall'ID di un prodotto?

23 nov 2012, 17:30:32
Visualizzazioni: 136K
Voti: 13

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

2
Commenti

Cosa rappresenta l'ID? Cos'è un 'prodotto'? È un custom post type? Un meta field? Cosa?

s_ha_dum s_ha_dum
23 nov 2012 17:37:29

Ciao, è un prodotto woocommerce ed è un post type.

Rodrigo Sanz Rodrigo Sanz
23 nov 2012 21:35:01
Tutte le risposte alla domanda 5
0
22

Opzione #1

Ottieni tutte le categorie di prodotti (product_cat) utilizzando questa funzione

global $product;

$terms = get_the_terms( $product->get_id(), 'product_cat' );

Documentazione ufficiale


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' );

Documentazione ufficiale


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;
}
2 set 2017 15:46:09
6
14

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.

23 nov 2012 20:13:25
Commenti

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.

Rodrigo Sanz Rodrigo Sanz
23 nov 2012 21:37:17

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

Mridul Aggarwal Mridul Aggarwal
24 nov 2012 15:17:07

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); ?>

Rodrigo Sanz Rodrigo Sanz
25 nov 2012 18:03:36

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 ) )

Rodrigo Sanz Rodrigo Sanz
25 nov 2012 18:05:37

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

Rodrigo Sanz Rodrigo Sanz
25 nov 2012 18:06:25

Hai usato product_tag. È possibile che il nome della categoria fosse product_category? Il codice sembra corretto e dall'output stai ottenendo un termine chiamato new con un id di 104. new è il nome di uno dei tag?

Mridul Aggarwal Mridul Aggarwal
25 nov 2012 23:26:06
Mostra i restanti 1 commenti
2
12

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

27 nov 2012 21:29:12
Commenti

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.

Johannes Pille Johannes Pille
27 nov 2012 21:34:34

puoi usare $product->get_id() per conoscere "$id_product"

Fanky Fanky
1 mar 2021 16:27:13
1
<?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;
          }
   ?>
19 ago 2020 11:13:19
Commenti

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

fuxia fuxia
19 ago 2020 12:34:18
1

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;
}
4 giu 2024 23:49:35
Commenti

questo ha funzionato per me

Mehdi Mehdi
6 ott 2024 01:33:44