Las etiquetas condicionales de WooCommerce y WordPress («Lógica condicional de WooCommerce y WordPress») se pueden usar en sus funciones.php para mostrar contenido en función de ciertas condiciones. Por ejemplo, puede mostrar un contenido diferente para diferentes categorías dentro de una sola función PHP.
Puedes encontrar la lista de Etiquetas condicionales de WooCommerce aquí y Etiquetas condicionales de WordPress aquí. No creo que valga la pena pegarlos aquí, así que use esos dos enlaces como referencia; de hecho, en esta publicación de blog me gustaría darle ejemplos, probablemente la mejor manera de aprender la personalización de WooCommerce.
- Primero: Cómo usar la lógica condicional
- 1. ¿Estás trabajando en la página de productos únicos de WooCommerce?
- PHP: Haga algo solo en páginas de productos individuales
- PHP: Haga algo si el producto ID = XYZ
- PHP: Haga algo si el producto pertenece a una categoría
- PHP: Haga algo si el producto pertenece a una etiqueta
- PHP: Haga algo si el producto está a la venta
- PHP: Haga algo si el producto es simple, variable, externo …
- PHP: Haga algo si el producto es virtual
- PHP: Haga algo si el producto se puede descargar
- PHP: Haga algo solo en los productos relacionados
- 2. ¿Estás trabajando en la página de WooCommerce Shop/Category?
- 3. ¿Estás trabajando en las páginas de WooCommerce?
Primero: Cómo usar la lógica condicional
Es posible que tenga un fragmento PHP (cualquiera de los que encuentre en este sitio web, por ejemplo), que hace algo como esto:
add_action( 'woocommerce_before_single_product', 'bbloomer_echo_text' ); function bbloomer_echo_text() { echo 'SOME TEXT'; }
Como puede ver, esto imprime algún texto en la parte superior de la página de producto único. La lógica condicional significa que desea ejecutar la función solo dada una determinada condición, por ejemplo, en este caso queremos imprimir ese texto solo si la ID del producto es 25.
Por lo tanto, la forma en que necesita modificar la función anterior es «envolviendo» todo el interior de la función dentro de una verificación condicional: si es producto 25, haga esto, si no hagas nada.
Por lo tanto, la función se convertirá:
add_action( 'woocommerce_before_single_product', 'bbloomer_echo_text' ); function bbloomer_echo_text() { global $product; if ( 25 === $product->get_id() ) { echo 'SOME TEXT'; } }
Como puede ver, el «eco» solo ocurre si la condición es verdadera. ¡Ahora, siga leyendo para más ejemplos lógicos condicionales!
1. ¿Estás trabajando en la página de productos únicos de WooCommerce?
Lo bueno de las páginas de productos individuales en WooCommerce es que WordPress sabe que son «publicaciones». Entonces, puedes usar IS_Single. Se puede encontrar la lista de ganchos para la página de producto único aquí.
PHP: Haga algo solo en páginas de productos individuales
add_action( 'woocommerce_before_main_content', 'bbloomer_single_product_pages' ); function bbloomer_single_product_pages() { if ( is_product() ) { echo 'Something'; } else { echo 'Something else'; } }
PHP: Haga algo si el producto ID = XYZ
add_action( 'woocommerce_after_single_product_summary', 'bbloomer_single_product_ID' ); function bbloomer_single_product_ID() { if ( is_single( '17' ) ) { echo 'Something'; } elseif ( is_single( '56' ) ) { echo 'Something else'; } }
PHP: Haga algo si el producto pertenece a una categoría
add_action( 'woocommerce_after_single_product_summary', 'bbloomer_single_category_slug' ); function bbloomer_single_category_slug() { if ( has_term( 'chairs', 'product_cat' ) ) { echo 'Something'; } elseif ( has_term( 'tables', 'product_cat' ) ) { echo 'Something else'; } }
PHP: Haga algo si el producto pertenece a una etiqueta
add_action( 'woocommerce_after_single_product_summary', 'bbloomer_single_tag_slug' ); function bbloomer_single_tag_slug() { if ( has_term( 'blue', 'product_tag' ) ) { echo 'Something'; } elseif ( has_term( 'red', 'product_tag' ) ) { echo 'Something else'; } }
PHP: Haga algo si el producto está a la venta
add_action( 'woocommerce_after_single_product_summary', 'bbloomer_single_on_sale' ); function bbloomer_single_on_sale() { global $product; if ( $product->is_on_sale() ) { // do something } }
PHP: Haga algo si el producto es simple, variable, externo …
add_action( 'woocommerce_after_single_product_summary', 'bbloomer_single_product_type' ); function bbloomer_single_product_type() { global $product; if( $product->is_type( 'simple' ) ){ // do something } elseif( $product->is_type( 'variable' ) ){ // do something } elseif( $product->is_type( 'external' ) ){ // do something } elseif( $product->is_type( 'grouped' ) ){ // do something } }
PHP: Haga algo si el producto es virtual
add_action( 'woocommerce_after_single_product_summary', 'bbloomer_single_virtual' ); function bbloomer_single_virtual() { global $product; if( $product->is_virtual() ){ // do something } }
PHP: Haga algo si el producto se puede descargar
add_action( 'woocommerce_after_single_product_summary', 'bbloomer_single_downloadable' ); function bbloomer_single_downloadable() { global $product; if ( $product->is_downloadable() ){ // do something } }
PHP: Haga algo solo en los productos relacionados
Los productos relacionados son generados por un «bucle». A veces es posible que desee usar su PHP solo en la página de producto único (y excluyendo los relacionados) o Viceversa.
El fragmento a continuación oculta el precio solo en la página de producto único y solo en la sección de productos relacionados.
add_filter( 'woocommerce_variable_price_html', 'bbloomer_remove_variation_price', 10, 2 ); function bbloomer_remove_variation_price( $price ) { global $woocommerce_loop; if ( is_product() && $woocommerce_loop['name'] == 'related' ) { $price = ''; } return $price; }
2. ¿Estás trabajando en la página de WooCommerce Shop/Category?
Puedes encontrar todo el SHOP/Archive WooCommerce Hooks aquí. Veamos cómo usar la lógica condicional en estas páginas de «bucle»:
PHP: Haz algo en la página de la tienda solo
add_action( 'woocommerce_before_main_content', 'bbloomer_loop_shop' ); function bbloomer_loop_shop() { if ( is_shop() ) { echo 'This will show on the Shop page'; } else { echo 'This will show on all other Woo pages'; } }
PHP: Haga algo en cada producto en las páginas de bucle
add_action( 'woocommerce_after_shop_loop_item', 'bbloomer_loop_per_product' ); function bbloomer_loop_per_product() { if ( has_term( 'chairs', 'product_cat' ) ) { echo 'Great chairs!'; } elseif ( has_term( 'tables', 'product_cat' ) ) { echo 'Awesome tables!'; }
PHP: Haga algo en las páginas de categoría
add_action( 'woocommerce_before_main_content', 'bbloomer_loop_cat' ); function bbloomer_loop_cat() { if ( is_product_category() ) { echo 'This will show on every Cat pages'; } else { echo 'This will show on all other Woo pages'; } }
PHP: Haga algo basado en el nombre de la categoría
add_action( 'woocommerce_before_main_content', 'bbloomer_loop_cat_slug' ); function bbloomer_loop_cat_slug() { if ( is_product_category( 'books' ) ) { echo 'This will show on the Books Cat page'; } elseif ( is_product_category( 'chairs' ) ) { echo 'This will show on the Chairs Cat page'; } }
PHP: Haz algo en las páginas de etiqueta solo
add_action( 'woocommerce_before_main_content', 'bbloomer_loop_tag' ); function bbloomer_loop_tag() { if ( is_product_tag() ) { echo 'This will show on every Cat pages'; } else { echo 'This will show on all other Woo pages'; } }
PHP: Haz algo basado en el nombre de la etiqueta
add_action( 'woocommerce_before_main_content', 'bbloomer_loop_tag_slug' ); function bbloomer_loop_tag_slug() { if ( is_product_tag( 'red' ) ) { echo 'This will show on the Red Tag page'; } elseif ( is_product_tag( 'yellow' ) ) { echo 'This will show on the Yellow Tag page'; } }
3. ¿Estás trabajando en las páginas de WooCommerce?
PHP: Haga algo si está en una página de WooCommerce (excluyendo el carrito/pago, por ejemplo, Shop & Cats & Tags & Products)
add_action( 'woocommerce_before_main_content', 'bbloomer_woo_page' ); function bbloomer_woo_page() { if ( is_woocommerce() ) { echo 'This will show on Woo pages'; } else { echo 'This will show on WP pages'; } }
PHP: Haga algo si está en el carrito/pago
add_action( 'woocommerce_sidebar', 'bbloomer_cart_checkout' ); function bbloomer_cart_checkout() { if ( is_cart() ) { echo 'This will show on the Cart sidebar'; } elseif ( is_checkout() ) { echo 'This will show on the Checkout sidebar'; } }
PHP: Haga algo si está en la página de pago de la orden de pago
add_action( 'hook', 'bbloomer_orderpay' ); function bbloomer_orderpay() { if ( is_checkout_pay_page() ) { echo 'This will show on Order Pay page'; } else { echo 'This will show on all other pages'; } }
PHP: Haz algo si en mis páginas de cuenta
add_action( 'hook', 'bbloomer_myaccount' ); function bbloomer_myaccount() { if ( is_account_page() ) { echo 'This will show on My Account pages'; } else { echo 'This will show on pages different than My Account'; } }
PHP: Haga algo si está en la página de gracias
Podrías ejecutar fácilmente funciones en la página de agradecimiento usando el WooCommerce_Thankyou gancho:
add_action( 'woocommerce_thankyou', 'bbloomer_run_function_thankyou_page' ); function bbloomer_run_function_thankyou_page() { // whatever }
De lo contrario, puede usar otro condicional, para que sepa que está en el «punto final de la página de agradecimiento»:
add_action( 'wp_head', 'bbloomer_run_function_thankyoupage' ); function bbloomer_run_function_thankyoupage() { if ( is_wc_endpoint_url( 'order-received' ) { // whatever } }