¿Cómo verificar si el producto está en una categoría determinada en un single-product.php en Woocommerce?
-
-
¿Podría serporque a suprimera declaración lefalta un `)` de cierre?Debería ser `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
-
Buena captura,peronoeseso.is_product_categorynoparecefuncionaren 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 respuestas
- votos
-
- 2012-12-18
No creo que
get_categories()
sea lamejor opciónpara usteden este casoporque devuelve una cadena contodas las categoríasenumeradas comoetiquetas de ancla,bien paramostrar,peronoexcelentepara calcularen código cuáles son las categorías. Bien,loprimero que debe hacerestomarelproducto/objeto depublicaciónpara lapágina actual si aúnno lotiene:global $post;
Luego,puede obtener los objetos detérmino de categoría deproducto (las categorías)paraelproducto. Aquíestoy convirtiendo los objetos detérmino de categoríaen unamatriz simple llamada
$categories
para que seamásfácil ver qué slugsestán asignados. Tengaen cuenta queesto devolverá todas categorías asignadas alproducto,no solo la de lapágina actual,es decir,siestamosen/shop/audio/funzo/
:$terms = wp_get_post_terms( $post->ID, 'product_cat' ); foreach ( $terms as $term ) $categories[] = $term->slug;
Entonces solotenemos que verificar si una categoríaestáen la lista:
if ( in_array( 'audio', $categories ) ) { // do something
Poniéndolotodojunto:
<?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'; }
Con suerte,estoes lo queestababuscando y responde a supregunta.
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
deberíafuncionaren este 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'; }
-
Manera súper simple yefectiva de haceresto.Creo queestaes unamejor respuesta.Super simple and effective way to do this. I think this is better answer.
- 0
- 2017-05-25
- Trevor
-
Preferíestoporqueera corto.Sinembargo hice 'si {cosa;volver;} `I preferred this because it was short. However I did `if { thing; return;}`
- 0
- 2018-01-31
- Eoin
-
- 2015-02-18
Vale lapena señalar quepuede revisar una lista de opciones llamando a unamatrizen lugar detener que desordenar su código conmuchas verificacioneselseif,asumiendo que desea hacer lomismo con cada categoría que sea.
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;
-
Creo queesta respuesta debería agregarse,comoedición,a la respuesta de Milo.I think this answer should be added, as edittion, to Milo's answer.
- 0
- 2015-02-18
- cybmeta
-
- 2016-06-09
Estoes antiguo,peropor si acaso lagente todavíaestábuscando WooThemes como una solución simple:
if ( is_product() && has_term( 'your_category', 'product_cat' ) ) { //do code }
* Cambie 'your_category'por lo queesté usando.
Aquíestáelenlace a la documentación: 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
Megustaría utilizar lafunción
get_categories()
de la clase WC_Product.Puedeencontrarelenlace a la documentación aquí .
Básicamente,dentro delbucle de lapágina,llame a lafunciónpara devolver las categorías asociadas conelproducto.
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.
-
Nopuedo codificaresto.Notengoni idea de cómo hacer queestofuncione.Que alguienilustreesto.Hicemi mejoresfuerzo allí.¿Debería reemplazaresto 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,lafunciónis_product_category () devuelve VERDADERO siestáen lapágina de categoría deproducto.Noes la categoría delproducto.Estoyencaminado hacia unproyectoen estemomento,perointentaré conseguirle unfragmento de códigomástarde.@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
-
Gracias,Stevenportomarseeltiempopara codificarestepequeñofragmento.Se lo agradezcomucho.Thanks, Steven for taking time to code this little snippet. Appreciate it very much.
- 0
- 2012-12-13
- Alex
¿Cómopuedo comprobaren elmundo si unproducto seencuentraen una determinada categoría deproductosen single-product.php ?
is_product_category ('slug') notiene ningúnefectoen single-product.php .Quierotener los condicionales superiores.¿Alguna soluciónparaestoen unapágina de un soloproducto?