¿Cómo verificar si el producto está en una categoría específica en single-product.php en Woocommerce?

12 dic 2012, 21:34:21
Vistas: 108K
Votos: 30

¿Cómo puedo verificar si un producto pertenece a una categoría específica de productos en el archivo single-product.php?

<?php if (is_product_category('audio')) {
           echo 'En audio';
               woocommerce_get_template_part( 'content', 'single-product' );

      } elseif (is_product_category('elektro')) {

            echo 'En elektro';
            woocommerce_get_template_part( 'content', 'single-product' );
         } else {
            echo 'algún blabla'; }  ?>

is_product_category('slug') no tiene efecto en single-product.php. Quiero tener las condicionales anteriores. ¿Hay alguna solución para esto en una página de producto individual?

3
Comentarios

Podría ser porque a tu primera declaración le falta un cierre de )? Debería ser if (is_product_category('audio'))

stealthyninja stealthyninja
12 dic 2012 22:32:53

Buen ojo, pero ese no es el problema. is_product_category no parece funcionar en single-product.php

Alex Alex
13 dic 2012 00:10:14

is_product_category() es para verificar si estás en una página de archivo de categoría de producto.. El nombre es confuso, lo sé, pero nunca devolvería true para un producto individual. (ver documentación)

Philip Philip
4 abr 2022 22:19:16
Todas las respuestas a la pregunta 5
3
48

has_term debería funcionar en este caso:

if ( has_term( 'audio', 'product_cat' ) ) {

       echo 'En audio';
       woocommerce_get_template_part( 'content', 'single-product' );

} elseif ( has_term( 'elektro', 'product_cat' ) ) {

       echo 'En elektro';
       woocommerce_get_template_part( 'content', 'single-product' );

} else {
       echo 'algún texto';
}
18 dic 2012 21:14:45
Comentarios

Método súper simple y efectivo para hacer esto. Creo que esta es la mejor respuesta.

Trevor Trevor
25 may 2017 05:57:39

Preferí esta solución porque era corta. Sin embargo, hice if { thing; return;}

Eoin Eoin
31 ene 2018 23:49:55

¡Esto funcionó perfectamente para mí - gracias!

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

No creo que get_categories() sea la mejor opción para ti en este caso porque devuelve una cadena con todas las categorías listadas como etiquetas de anclaje, está bien para mostrar, pero no es ideal para determinar en el código cuáles son las categorías. Bien, lo primero que necesitas hacer es obtener el objeto de producto/post de la página actual si aún no lo tienes:

global $post;

Luego puedes obtener los objetos de término de categoría de producto (las categorías) para el producto. Aquí estoy convirtiendo los objetos de término de categoría en un array simple llamado $categories para que sea más fácil ver qué slugs están asignados. Ten en cuenta que esto devolverá todas las categorías asignadas al producto, no solo la de la página actual, es decir, si estamos en /shop/audio/funzo/:

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

Entonces solo tenemos que verificar si una categoría está en la lista:

if ( in_array( 'audio', $categories ) ) {  // hacer algo

Juntando todo:

<?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 'En audio';
  woocommerce_get_template_part( 'content', 'single-product' );
} elseif ( in_array( 'elektro', $categories ) ) {
  echo 'En elektro';
  woocommerce_get_template_part( 'content', 'single-product' );
} else {
  echo 'algún blabla';
}

Espero que esto sea lo que estabas buscando y responda tu pregunta.

18 dic 2012 21:05:33
1

Vale la pena mencionar que puedes recorrer una lista de opciones llamando a un array en lugar de saturar tu código con múltiples verificaciones elseif, asumiendo que quieres hacer lo mismo con cada categoría.

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

// Hacer algo aquí

else :

// Hacer otra cosa

endif;
18 feb 2015 18:13:08
Comentarios

Creo que esta respuesta debería agregarse, como edición, a la respuesta de Milo.

cybmeta cybmeta
18 feb 2015 18:41:36
0

Esto es antiguo, pero por si acaso la gente sigue buscando WooThemes como una solución simple:

if ( is_product() && has_term( 'tu_categoria', 'product_cat' ) ) {
    //hacer código
}

*Cambia 'tu_categoria' por lo que estés usando.

Aquí está el enlace a la documentación: https://docs.woothemes.com/document/remov-product-content-based-on-category/

10 jun 2016 00:37:40
3

Te recomendaría usar la función get_categories() de la clase WC_Product.

Puedes encontrar el enlace a la documentación aquí.

Básicamente, dentro del bucle de la página, llama a la función para devolver las categorías asociadas al producto.

13 dic 2012 00:26:38
Comentarios

No soy capaz de programar esto. No tengo ni idea de cómo hacer que funcione. ¿Alguien podría ilustrarlo, por favor? Hice mi mejor esfuerzo arriba. ¿Debería reemplazar esto con get_categories()?

Alex Alex
13 dic 2012 18:04:51

@Alex la función is_product_category() devuelve TRUE si estás en la página de categoría de producto. No la categoría del producto. Ahora mismo estoy inmerso en un proyecto, pero intentaré darte un fragmento de código más tarde.

Steve Steve
13 dic 2012 19:55:24

Gracias, Steven por tomarte el tiempo para programar este pequeño fragmento. Lo aprecio mucho.

Alex Alex
13 dic 2012 19:56:59