Después de una búsqueda profunda, creé un código abreviado de WooCommerce. El propósito de esto es mostrar el mensaje "Compre X más productos para obtener un descuento".
Mi código:
add_shortcode('check', 'custommessage'); function custommessage() { $items_count = WC()->cart->get_cart_contents_count(); $min_count = 6; if( $items_count < $min_count ){ echo sprintf('%s products more for discount' , $min_count - $items_count ); } }En la página del carrito de WooComerce, después de agregar X productos al carrito o eliminar la cantidad, funciona y actualiza automáticamente el mensaje
Pero cuando coloco el código abreviado (en el carrito lateral) no actualiza automáticamente el conteo de X. Aunque también está impulsado por AJAX.
¿Algún consejo de cómo puedo solucionar esto?
Para ajaxificar su mensaje para que se actualice cuando se agrega/elimina un artículo (a través de ajax) use el enlace de filtro woocommerce_add_to_cart_fragments
Entonces obtienes:
function custom_message() { // Initialize $message = __( 'Default message', 'woocommerce' ); // True if ( WC()->cart ) { // Get number of items in the cart. $items_count = WC()->cart->get_cart_contents_count(); $min_count = 6; if ( $items_count < $min_count ) { $message = sprintf( __( '%s products more for discount', 'woocommerce' ), $min_count - $items_count ); } else { $message = __( 'Some message', 'woocommerce' ); } } return $message; } // Refreshing on cart ajax events function filter_woocommerce_add_to_cart_fragments( $fragments ) { $fragments['div.display-message'] = '<div class="display-message">' . custom_message() . '</div>'; return $fragments; } add_filter( 'woocommerce_add_to_cart_fragments', 'filter_woocommerce_add_to_cart_fragments', 10, 1 );1) Luego, para mostrar esto a través de un código abreviado, use:
function display_my_message() { return '<div class="display-message">' . custom_message() . '</div>'; } // Register shortcode add_shortcode( 'display_message', 'display_my_message' );USO DE CÓDIGO CORTO
En una página existente:
[display_message]O en PHP:
echo do_shortcode("[display_message]");
O
2) Para mostrar el mensaje a través de cualquier gancho deseado (en este ejemplo, muestro 2 ganchos. 1 en la página del carrito y 1 en la página de un solo producto, se adapta a sus necesidades). Utilizar:
// Display message via the desired hooks function display_message() { echo '<div class="display-message">' . custom_message() . '</div>'; } add_action( 'woocommerce_before_shop_loop', 'display_message', 10, 0 ); add_action( 'woocommerce_before_add_to_cart_form', 'display_message', 10, 0 );