Come controllare se il prodotto è in una determinata categoria su single-product.php in WooCommerce?
Come posso verificare se un prodotto appartiene a una determinata categoria di prodotti nel file single-product.php?
<?php if (is_product_category('audio')) {
echo 'In audio';
woocommerce_get_template_part( 'content', 'single-product' );
} elseif (is_product_category('elektro')) {
echo 'In elektro';
woocommerce_get_template_part( 'content', 'single-product' );
} else {
echo 'qualche blabla'; } ?>
is_product_category('slug') non ha effetto su single-product.php. Vorrei poter utilizzare le condizioni sopra indicate. C'è una soluzione per questo nella pagina single-product?
has_term
dovrebbe funzionare in questo caso:
if ( has_term( 'audio', 'product_cat' ) ) {
echo 'In audio';
woocommerce_get_template_part( 'content', 'single-product' );
} elseif ( has_term( 'elektro', 'product_cat' ) ) {
echo 'In elektro';
woocommerce_get_template_part( 'content', 'single-product' );
} else {
echo 'qualche blabla';
}

Non penso che get_categories()
sia la migliore opzione in questo caso perché restituisce una stringa con tutte le categorie elencate come tag di ancoraggio, ottimo per la visualizzazione, ma non ideale per identificare programmaticamente quali siano le categorie. Ok, quindi la prima cosa che devi fare è ottenere l'oggetto prodotto/post per la pagina corrente se non lo hai già:
global $post;
Poi puoi ottenere gli oggetti termine di categoria prodotto (le categorie) per il prodotto. Qui sto convertendo gli oggetti termine di categoria in un semplice array chiamato $categories
per rendere più facile vedere quali slug sono assegnati. Nota che questo restituirà tutte le categorie assegnate al prodotto, non solo quella della pagina corrente, cioè se siamo su /shop/audio/funzo/
:
$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;
Poi dobbiamo solo verificare se una categoria è presente nella lista:
if ( in_array( 'audio', $categories ) ) { // fai qualcosa
Mettendo tutto insieme:
<?php
global $post;
$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;
if ( in_array( 'audio', $categories ) ) {
echo 'In audio';
woocommerce_get_template_part( 'content', 'single-product' );
} elseif ( in_array( 'elektro', $categories ) ) {
echo 'In elektro';
woocommerce_get_template_part( 'content', 'single-product' );
} else {
echo 'testo generico';
}
Spero che questo sia quello che cercavi e che risponda alla tua domanda.

Vale la pena notare che puoi esaminare una lista di opzioni chiamando un array invece di dover ingombrare il tuo codice con molti controlli elseif, assumendo che tu voglia fare la stessa cosa per ogni categoria.
if( has_term( array( 'laptop', 'frigorifero', 'cappelli', 'bacchetta magica' ), 'product_cat' ) ) :
// Fai qualcosa qui
else :
// Fai qualcos'altro
endif;

Questo è datato ma nel caso qualcuno stia ancora cercando una soluzione semplice con WooThemes:
if ( is_product() && has_term( 'la_tua_categoria', 'product_cat' ) ) {
//esegui il codice
}
*Sostituisci 'la_tua_categoria' con il termine che stai utilizzando.
Ecco il link alla documentazione: https://docs.woothemes.com/document/remov-product-content-based-on-category/

Consiglierei di utilizzare la funzione get_categories()
della classe WC_Product.
Puoi trovare il link alla documentazione qui.
Fondamentalmente, all'interno del loop della pagina, chiama la funzione per restituire le categorie associate al prodotto.

Non sono in grado di programmare questo. Non ho la minima idea di come farlo funzionare. Qualcuno potrebbe illustrarmelo, per favore? Ho fatto del mio meglio qui sopra. Dovrei sostituirlo con get_categories()?

@Alex la funzione is_product_category() restituisce TRUE se ti trovi nella pagina della categoria del prodotto. Non la categoria del prodotto stesso. Al momento sono impegnato con un progetto, ma cercherò di fornirti uno snippet di codice più tardi.
