Come controllare se il prodotto è in una determinata categoria su single-product.php in WooCommerce?

12 dic 2012, 21:34:21
Visualizzazioni: 108K
Voti: 30

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?

3
Commenti

Potrebbe essere perché la tua prima dichiarazione manca di una parentesi ) di chiusura? Dovrebbe essere if (is_product_category('audio'))

stealthyninja stealthyninja
12 dic 2012 22:32:53

Ottima osservazione, ma non è quello. is_product_category non sembra funzionare su single-product.php

Alex Alex
13 dic 2012 00:10:14

is_product_category() serve per verificare se ti trovi su una pagina archivio di categoria prodotto.. Il nome è confuso, sono d'accordo, ma non restituirà mai true per un singolo prodotto. (vedi documentazione)

Philip Philip
4 apr 2022 22:19:16
Tutte le risposte alla domanda 5
3
48

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';
}
18 dic 2012 21:14:45
Commenti

Modo super semplice ed efficace per farlo. Penso che questa sia la risposta migliore.

Trevor Trevor
25 mag 2017 05:57:39

Ho preferito questa perché era breve. Tuttavia ho fatto if { cosa; return;}

Eoin Eoin
31 gen 2018 23:49:55

Ha funzionato perfettamente per me - grazie!

Calum Childs Calum Childs
23 lug 2021 08:41:49
0
32

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.

18 dic 2012 21:05:33
1

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;
18 feb 2015 18:13:08
Commenti

Penso che questa risposta dovrebbe essere aggiunta, come modifica, alla risposta di Milo.

cybmeta cybmeta
18 feb 2015 18:41:36
0

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/

10 giu 2016 00:37:40
3

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.

13 dic 2012 00:26:38
Commenti

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 Alex
13 dic 2012 18:04:51

@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.

Steve Steve
13 dic 2012 19:55:24

Grazie, Steven, per aver trovato il tempo di scrivere questo piccolo snippet. Lo apprezzo moltissimo.

Alex Alex
13 dic 2012 19:56:59