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


25

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


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

Buena captura, pero eso no es todo. is_product_category no parece funcionar en un solo producto.php
Alex

Respuestas:


28

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 descubrir en el código cuáles son las categorías. Ok, lo primero que debes hacer es tomar el producto / objeto de publicación 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 $categoriespara que sea más fácil ver qué babosas se asignan. 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

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

Esperemos que esto sea lo que estaba buscando y responda su pregunta.


37

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

Súper simple y efectiva forma de hacer esto. Creo que esta es una mejor respuesta.
Trevor

Preferí esto porque era corto. Sin embargo, lo hiceif { thing; return;}
Eoin

8

Vale la pena señalar que puede pasar por una lista de opciones llamando a una matriz en lugar de tener que saturar su código con muchas otras verificaciones, suponiendo que quiera hacer lo mismo con cada categoría.

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

// Do stuff here

else :

// Do some other stuff

endif;

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


0

Me gustaría ver el uso de la get_categories()función de la clase WC_Product.

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

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


No puedo codificar esto. No tengo idea de cómo hacer que esto funcione. Alguien por favor ilustra esto. Hice mi mejor esfuerzo allí arriba. ¿Debo reemplazar esto con get_categories ()?
Alex

@Alex, la función is_product_category () devuelve TRUE si está en la página de categoría de producto. No es la categoría del producto. En este momento estoy en un proyecto, pero intentaré conseguirte un fragmento de código más tarde.
Steve

Gracias, Steven por tomarte el tiempo de codificar este pequeño fragmento. Se lo agradezco mucho.
Alex
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.