devdev / in the loop

[Woocommerce] Controllare se un prodotto è in una specifica categoria (o tag)

Stai provando a far funzionare la function in_category() senza successo? Questo post fa al caso tuo, allora.

in_category(), infatti, non può aiutarci con i prodotti di Woocommerce, perché è una funzione nata con WordPress, e quindi relativa ad Articoli (post) o altri tipi di post con i Tag abilitati.

Woocommerce, infatti, aggiunge un nuovo Tipo di post (Custom post type) che corrisponde a product, ed anche le categorie di prodotti sono personalizzate (custom taxonomy), chiamate product_cat. Quindi i due tipi di categorie, quelli degli Articoli e quelli dei Prodotti sono indipendenti.

Dovremmo utilizzare quindi la funzione has_term() per capire se uno specifico prodotto è presente in una categoria:

has_term( $terms = '', $taxonomy = '', $post = null )

$terms: utilizziamo lo slug o l’ID della categoria prodotti. Possiamo passare anche un array di valori;

$taxonomy: se vogliamo capire se un prodotto è in una Categoria, indichiamo product_cat. Se invece vogliamo capire se il prodotto ha un determinato Tag, usiamo product_tag.

$post: passiamo l’ID del prodotto o un oggetto WP_Post. Se non passiamo nulla, il default è l’attuale prodotto, ma soltanto se ci troviamo in un loop.

Vediamo un esempio completo:

if (has_term( "sandali", 'product_cat', 50)) {
// il prodotto con ID 50 è nella Categoria che ha slug "sandali"
}

if (has_term(14, 'product_cat', 50)) {
// il prodotto con ID 50 è nella Categoria con ID = 14
}

if (has_term(array( 'sneaker', 'zaini' ), 'product_cat', 50) {
// il prodotto con ID 50 è sia nella Categoria "sneaker" che "zaini"
}
Questo articolo ti è stato utile?
Roba figa da
if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.