WooCommerce: compruebe si los productos pertenecen a la categoría / etiqueta

Hemos estudiado la » lógica condicional » extensamente en las publicaciones anteriores de Business Bloomer. En el spin-off de hoy, quiero aclarar cómo se puede verificar si un producto determinado pertenece a una categoría, etiqueta o taxonomía personalizada porque este es uno de los escenarios de lógica condicional más utilizados.

Es importante saber que un producto puede estar dentro del «bucle» (por ejemplo, la página de la tienda o una lista de productos), alternativamente, puede estar en la página de un solo producto o tener la identificación única del producto, o incluso puede verificar si un producto La categoría está dentro del carrito . Finalmente, incluso puede ejecutar la verificación de categoría de producto dentro de un pedido o un correo electrónico de pedido.

De cualquier manera, la función es siempre la misma. Simplemente necesita entender cómo usarlo. ¡Disfrutar!

Conoce la función de WordPress has_term()

WordPress viene al rescate con la función has_term() , que acepta 3 parámetros:

  1. El nombre del término (categoría, pestaña, término personalizado), ID de término, slug o conjunto de ellos
  2. El nombre de la taxonomía (predeterminado o personalizado)
  3. El ID de la publicación o el objeto de la publicación, en caso de que no quieras usar la «publicación actual»

Básicamente es así: define un término que desea comparar con el objeto de la publicación, por ejemplo, «Rock», especifica el nombre de taxonomía predeterminado o personalizado (en el ejemplo de Jazz, podría ser que esté usando una taxonomía personalizada de «Música») y finalmente puede especificar el ID de la publicación:

if ( has_term( 'rock', 'music', 26 ) ) {
    // do something if post 26 belongs to Rock Music
}

Pan comido. Ahora es el momento de aplicar esto a WooCommerce y ver dónde podría ser útil. WooCommerce ya viene con taxonomías personalizadas: » product_cat » para categorías de productos y » product_tag » para etiquetas de productos. Eso es todo lo que necesitamos usar.

WooCommerce: verifique si el producto actual pertenece a la categoría de producto @ Página de producto único

Este es el escenario de caso más fácil. Estás personalizando la página de un solo producto y quieres mostrar un banner específico en caso de que el producto actual pertenezca a una determinada categoría .

Lo bueno es que estamos en la página de un solo producto y, por lo tanto, sabemos que existe la «publicación actual» y no necesitamos el tercer parámetro has_term() .

Elegí el gancho woocommerce_before_single_product para mostrar el banner encima de la plantilla de un solo producto, pero siéntete libre de elegir cualquier otro gancho de página de un solo producto . El código es así:

add_action( 'woocommerce_before_single_product', 'bbloomer_print_banner_if_product_belongs_to_category_tables' );
 
function bbloomer_print_banner_if_product_belongs_to_category_tables() {
   if ( has_term( 'tables', 'product_cat' ) ) {
      echo '<img src="banner.png">';
   }
}

Solo si el único producto que estamos viendo pertenece a la categoría de «mesas», se mostrará la imagen. De lo contrario, no pasará nada.

WooCommerce: verifique si el producto actual pertenece a la etiqueta del producto @ Página de producto único

De manera similar, puede comparar el producto actual con una etiqueta de producto determinada:

add_action( 'woocommerce_before_single_product', 'bbloomer_print_banner_if_product_belongs_to_tag_red' );
 
function bbloomer_print_banner_if_product_belongs_to_tag_red() {
   if ( has_term( 'red', 'product_tag' ) ) {
      echo '<img src="banner2.png">';
   }
}

WooCommerce: verifique si el producto actual pertenece a la categoría de producto @ Página de la tienda

Vamos a complicar las cosas.

Ahora estamos en la página de la tienda, o en una sección de lista de productos generada por un código abreviado. Eso se llama el «bucle». En este caso, tiene varios productos en la misma página, por lo que realmente no podemos usar el mismo método que el anterior, ya que la «publicación actual» no será una ID de producto, sino la ID de la página actual.

Por lo tanto, necesitamos «calcular» la ID en función de la posición en la que estamos dentro del «bucle». Eso es más fácil de codificar que decir en realidad.

Entonces, intentemos imprimir un mensaje debajo de CADA producto en la página de la Tienda que pertenezca a una categoría determinada, por ejemplo, «Sillas». He usado woocommerce_after_shop_loop_item, pero siéntete libre de elegir cualquier otro gancho de tienda de mi guía visual de ganchos .

Como puede ver dentro del fragmento, primero necesito encontrar el «ID de producto de bucle» porque esto debe ejecutarse para cada producto en el bucle, y luego puedo volver usando el condicional has_term() :

add_action( 'woocommerce_after_shop_loop_item', 'bbloomer_print_message_if_product_belongs_to_category_chairs' );
 
function bbloomer_print_message_if_product_belongs_to_category_chairs() {
   global $product;
   $product_id = $product->get_id();
   if ( has_term( 'chairs', 'product_cat', $product_id ) ) {
      echo 'A message about chairs';
   }
}

WooCommerce: verifique si el producto actual pertenece a la etiqueta del producto @ Página de la tienda

Sin comentarios.

add_action( 'woocommerce_after_shop_loop_item', 'bbloomer_print_message_if_product_belongs_to_tag_yellow' );
 
function bbloomer_print_message_if_product_belongs_to_tag_yellow() {
   global $product;
   $product_id = $product->get_id();
   if ( has_term( 'yellow', 'product_tag', $product_id ) ) {
      echo 'A message about yellow products';
   }
}

WooCommerce: compruebe si un ID de producto pertenece a la categoría de producto

Digamos que está fuera del circuito y no en la página de un solo producto. Eso significa que no tiene un «producto actual» con el que lidiar, ningún $producto global al que pueda llamar, y está atascado.

Afortunadamente, la función has_term() acepta la ID de la publicación como tercer parámetro para que pueda ejecutar su verificación condicional incluso en la página de inicio, dentro de un código abreviado, dentro de un correo electrónico de pedido de WooCommerce, etc.

Simplemente necesita especificar la identificación que desea.

En este estudio de caso, deseo mostrar algo en el pie de página si el ID de producto 59 pertenece a una determinada categoría. Podría ser para un banner publicitario en todo el sitio, por ejemplo.

add_action( 'wp_footer', 'bbloomer_print_message_if_product_ID_belongs_to_category_lamps' );
 
function bbloomer_print_message_if_product_ID_belongs_to_category_lamps() {
   if ( has_term( 'lamps', 'product_cat', 59 ) ) {
      echo '<p>Product ID 59 belongs to Lamps</p>';  
   }
}

Deja un comentario