Come verificare se il prodotto appartiene a una determinata categoria su un singolo prodotto.php in Woocommerce?


25

In che modo posso verificare se un prodotto appartiene a una determinata categoria di prodotti su 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 'some blabla'; }  ?>

is_product_category ('slug') non ha alcun effetto sul singolo prodotto.php . Voglio avere i condizionali superiori. Qualche soluzione per questo su una pagina di un singolo prodotto?


Potrebbe essere perché alla tua prima affermazione manca una chiusura )? Dovrebbe essereif (is_product_category('audio'))
stealthyninja il

Buona cattura, ma non è così. is_product_category non sembra funzionare su single-product.php
Alex

Risposte:


28

Non penso che get_categories()sia l'opzione migliore per te in questo caso perché restituisce una stringa con tutte le categorie elencate come tag di ancoraggio, va bene per la visualizzazione, ma non è grande per capire nel codice quali sono le categorie. Ok, quindi la prima cosa che devi fare è prendere l'oggetto prodotto / post per la pagina corrente se non l'hai già:

global $post;

Quindi è possibile ottenere gli oggetti termine categoria prodotto (le categorie) per il prodotto. Qui sto trasformando i termini della categoria oggetti in un semplice array chiamato in $categoriesmodo che sia più facile vedere quali slug sono assegnati. Nota che questo restituirà tutte le categorie assegnate al prodotto, non solo quella della pagina corrente, ovvero se siamo su /shop/audio/funzo/:

$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;

Quindi non ci resta che verificare se una categoria è nell'elenco:

if ( in_array( 'audio', $categories ) ) {  // do something

Mettere 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 'some blabla';
}

Spero che questo sia quello che stavi cercando e risponda alla tua domanda.


37

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 'some blabla';
}

Modo super semplice ed efficace per farlo. Penso che questa sia una risposta migliore.
Trevor,

Ho preferito questo perché era breve. Comunque ho fattoif { thing; return;}
Eoin

8

Vale la pena notare che è possibile passare attraverso un elenco di opzioni chiamando un array anziché dover ingombrare il codice con molti altri controlli, supponendo che si desideri fare la stessa cosa con ogni categoria che è.

if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) :

// Do stuff here

else :

// Do some other stuff

endif;

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


0

get_categories()Guarderei usando la funzione della classe WC_Product.

Puoi trovare il link alla documentazione qui .

Fondamentalmente all'interno del ciclo della pagina chiama la funzione per restituire le categorie associate al prodotto.


Non sono in grado di codificare questo. Non ho idea di come farlo funzionare. Qualcuno per favore illustra questo. Ho fatto del mio meglio lassù. Devo sostituirlo con get_categories ()?
Alex,

@Alex la funzione is_product_category () restituisce VERO se ci si trova nella pagina della categoria del prodotto. Non la categoria del prodotto. Sono a capo di un progetto in questo momento, ma cercherò di procurarti uno snippet di codice in seguito.
Steve,

Grazie, Steven per aver dedicato del tempo a scrivere questo piccolo frammento. Lo apprezzo molto.
Alex,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.