¿Cómo verificar si el producto se encuentra en una determinada categoría en un solo producto.php en Woocommerce?

19

¿Cómo puedo verificar si un producto está en una determinada categoría de productos en 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') no tiene ningún efecto en single-product.php . Quiero tener los condicionales superiores. ¿Alguna solución para esto en una página de un solo producto?

    
pregunta Alex 12.12.2012 - 20:34

5 respuestas

23

No creo que get_categories() sea la mejor opción para usted en este caso porque devuelve una cadena con todas las categorías enumeradas como etiquetas de anclaje, bien para mostrar, pero no es excelente para averiguar en el código cuáles son las categorías . Bien, lo primero que debes hacer es agarrar el producto / postear objeto para la página actual si aún no lo tienes:

global $post;

Luego puede 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 una matriz simple llamada $categories para que sea más fácil ver qué slugs están asignados. Tenga 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;

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

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

Poniéndolo todo junto:

<?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';
}

Esperamos que esto sea lo que estaba buscando y responda a su pregunta.

    
respondido por el Justin Stern 18.12.2012 - 20:05
25

has_term debería funcionar en 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';
}
    
respondido por el Milo 18.12.2012 - 20:14
6

Vale la pena notar que puedes ir a través de una lista de opciones llamando a una matriz en lugar de tener que saturar tu código con muchas otras comprobaciones, asumiendo que quieres hacer lo mismo con cada categoría que es.

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

// Do stuff here

else :

// Do some other stuff

endif;
    
respondido por el Koshensky 18.02.2015 - 17:13
2

Esto es antiguo, pero en caso de que la gente siga considerando WooThemes como una solución simple:

if ( is_product() && has_term( 'your_category', 'product_cat' ) ) {
    //do code
}

* Cambia 'tu_categoría' a lo que estés usando.

Aquí está el enlace a la documentación: enlace

    
respondido por el tiaNaturally 09.06.2016 - 23:37
0

Me gustaría usar la función get_categories() de la clase WC_Product.

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

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

    
respondido por el Steve 12.12.2012 - 23:26

Lea otras preguntas en las etiquetas