Come verificare se il prodotto è in una determinata categoria su un singolo prodotto.php in Woocommerce?
-
-
Potrebbeessereperché allatuaprima affermazionemanca una chiusura `)`?Dovrebbeessere `if (is_product_category ('audio'))`Might be because your first statement is missing a closing `)`? It should be `if (is_product_category('audio'))`
- 0
- 2012-12-12
- stealthyninja
-
Buona cattura,manon è così.is_product_categorynon sembrafunzionare su single-product.phpGood catch, but that's not it. is_product_category doesn't seem to work on single-product.php
- 0
- 2012-12-12
- Alex
-
5 risposta
- voti
-
- 2012-12-18
Nonpenso che
get_categories()
sia l'opzionemiglioreperte in questo casoperché restituisce una stringa contutte le categorieelencate cometag di ancoraggio,vabene per la visualizzazione,manoneccezionaleper capirenel codice quali sono le categorie. Ok,quindi laprima cosa che devifare èprendere l'oggettoprodotto/postper lapagina corrente senon lo haigià:global $post;
Quindipuoi otteneregli oggettitermine della categoria diprodotto (le categorie)perilprodotto. Qui stotrasformandoiltermine di categoria oggettiin un semplice array denominato
$categories
in modo che siapiùfacile vedere quali slug sono assegnati. Nota che questo restituirà tutte le categorie assegnate alprodotto,non solo quella dellapagina corrente,cioè se siamo su/shop/audio/funzo/
:$terms = wp_get_post_terms( $post->ID, 'product_cat' ); foreach ( $terms as $term ) $categories[] = $term->slug;
Quindi dobbiamo solo controllare se una categoria ènell'elenco:
if ( in_array( 'audio', $categories ) ) { // do something
Mettendotuttoinsieme:
<?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'; }
Si spera che questo sia quello che stavi cercandoe che risponda allatua domanda.
I don't think
get_categories()
is the best option for you in this case because it returns a string with all the categories listed as anchor tags, fine for displaying, but not great for figuring out in code what the categories are. Ok, so the first thing you need to do is grab the product/post object for the current page if you don't already have it:global $post;
Then you can get the product category term objects (the categories) for the product. Here I'm turning the category term objects into a simple array named
$categories
so it's easier to see what slugs are assigned. Note that this will return all categories assigned to the product, not just the one of the current page, ie if we're on/shop/audio/funzo/
:$terms = wp_get_post_terms( $post->ID, 'product_cat' ); foreach ( $terms as $term ) $categories[] = $term->slug;
Then we just have to check whether a category is in the list:
if ( in_array( 'audio', $categories ) ) { // do something
Putting it all together:
<?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'; }
Hopefully this is what you were looking for and answers your question.
-
- 2012-12-18
has_term
dovrebbefunzionarein 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'; }
has_term
should work in this case: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 sempliceedefficaceperfarlo.Penso che questa sia una rispostamigliore.Super simple and effective way to do this. I think this is better answer.
- 0
- 2017-05-25
- Trevor
-
L'hopreferitoperchéerabreve.Tuttavia hofatto `if {cosa;return;} `I preferred this because it was short. However I did `if { thing; return;}`
- 0
- 2018-01-31
- Eoin
-
- 2015-02-18
Vale lapenanotare chepuoi scorrere unelenco di opzioni chiamando un arrayinvece di doveringombrareiltuo codice conmolti controllielseif,supponendo chetu vogliafare 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;
It's worth noting that you can go through a list of options by calling an array rather than having to clutter up your code with lots of elseif checks, assuming you want to do the same thing with each category that is.
if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) : // Do stuff here else : // Do some other stuff endif;
-
Penso che questa risposta dovrebbeessere aggiunta,comemodifica,alla risposta di Milo.I think this answer should be added, as edittion, to Milo's answer.
- 0
- 2015-02-18
- cybmeta
-
- 2016-06-09
Questo è vecchio,manel caso lepersone stiano ancora cercando WooThemes come una soluzione semplice:
if ( is_product() && has_term( 'your_category', 'product_cat' ) ) { //do code }
* Cambia "tua_categoria" con quello che stai utilizzando.
Eccoil link alla documentazione: https://docs.woothemes.com/document/remov-product-content-based-on-category/
This is old but just in case people are still looking WooThemes as a simple solution:
if ( is_product() && has_term( 'your_category', 'product_cat' ) ) { //do code }
*Change 'your_category' to whatever you are using.
Here is the link to the documentation: https://docs.woothemes.com/document/remov-product-content-based-on-category/
-
- 2012-12-12
Proverei a utilizzare lafunzione
get_categories()
della classe WC_Product.Puoitrovareil link alla documentazione qui .
Fondamentalmente all'interno del ciclo dellapagina chiama lafunzioneper restituire le categorie associate alprodotto.
I'd look at using the
get_categories()
function of the WC_Product class.You can find the link to the documentation here.
Basically within the loop of the page call the function to return the categories associated with the product.
-
Non sonoin grado di codificarlo.Non ho lapiùpallidaidea di comefarlofunzionare.Qualcuno,perfavore,loillustri.Hofatto delmiomeglio lassù.Dovrei sostituirlo conget_categories ()?I am not able to code this. I don't have a clue how to get this to work. Somebody please illustrate this. I tried my best up there. Should I replace this with get_categories()?
- 0
- 2012-12-13
- Alex
-
@Alex lafunzioneis_product_category () restituisce TRUE seti trovinellapagina della categoria delprodotto.Non la categoria delprodotto.Almomento sono a capo di unprogetto,ma cercherò diprocurarti uno snippet di codicepiùtardi.@Alex the is_product_category() function returns TRUE if you're on the product category page. Not the category of the product. I'm heads down on a project right now, but I'll try to get you a code snippet later.
- 0
- 2012-12-13
- Steve
-
Grazie,Stevenper aver dedicato deltempo a codificare questopiccolo snippet.Lo apprezzomoltissimo.Thanks, Steven for taking time to code this little snippet. Appreciate it very much.
- 0
- 2012-12-13
- Alex
Comeposso controllare se unprodotto sitrovain una determinata categoria diprodotti su single-product.php ?
is_product_category ('slug') non ha alcuneffetto su single-product.php .Voglio averei condizionali superiori.Qualche soluzioneper questo su unapagina di un singoloprodotto?