Cómo vimos en el artículo de cómo aumentar el pedido medio, una de las estrategias era ofrecer un envío gratuito a partir de cierta cantidad. Para avisar de esto normalmente solemos usar la barra superior del menú o avisarlo en la ficha del producto.
Pero… Existe otra forma de hacerlo, y es avisando al cliente cuánto le queda para que su envío sea gratuito. Por ejemplo colocar encima de los productos relacionados de la ficha de producto cuánto le falta o bien en la propia página de finalizar compra de WooCommerce.
Todo esto vamos a aprenderlo en este tutorial solo a código para no tener que instalar plugins así que empezamos:
Índice
Notificar cuánto queda en la página de checkout
Añade este código a tu archivo functions.php o a tu plugin de funcionalidades como explico aquí:
add_action( 'woocommerce_before_checkout_form_cart_notices', 'dl_notificacion_envio_carrito_checkout', 10, 0 );
function dl_notificacion_envio_carrito_checkout() {
if ( is_checkout() && WC()->cart ) {
$total = WC()->cart->get_cart_contents_total(); // Después del dto
$limit = 100.00; // Pon aquí cual es el precio del envío gratuito
// Condicional si el carrito es inferior a la cantidad
if ( $total < $limit ) {
// Calcular diferencia
$diff = $limit - $total;
$diff_formatted = wc_price( $diff );
// Mostrar aviso
wc_add_notice( sprintf( "Añade %s para tener envío gratuito!", $diff_formatted ), 'notice' );
}
}
}
Obtendremos el siguiente resultado en la página de pago:

Mostrar mensaje en la ficha de producto
Podríamos indicar al cliente al lado del botón de añadir al carrito cuánto le queda para los portes gratuitos, siendo así un poco más probable conseguir esa compra, en este caso añadiríamos el siguiente código:
add_action( 'woocommerce_after_add_to_cart_button', 'dl_notificacion_envio_carrito_checkout_2', 10, 0 );
function dl_notificacion_envio_carrito_checkout_2() {
if ( is_checkout() && WC()->cart ) {
$total = WC()->cart->get_cart_contents_total(); // Después del dto
$limit = 100.00; // Pon aquí cual es el precio del envío gratuito
// Condicional si el carrito es inferior a la cantidad
if ( $total < $limit ) {
// Calcular diferencia
$diff = $limit - $total;
$diff_formatted = wc_price( $diff );
// Mostrar aviso
wc_add_notice( sprintf( "Añade %s para tener envío gratuito!", $diff_formatted ), 'notice' );
}
}
}
Este último puede variar la localización, dependiendo de en dónde lo insertéis. Quedando un resultado:

Si deseas ocultar precios de los prodcutos para ciertos perfiles de usuarios haz clic aquí.
Por último mencionar que ahora estoy estableciendo en tiendas online con WooCommerce un servicio de punto de venta físico. Cualquier duda sobre este tutorial dejármela en comentarios.
Hola! He seguido tu tutorial (con plugin y sin) y cuando he logrado hacerlo me sale una cantidad desorbitada de pedido mínimo para que el cliente tenga gastos gratis. ¿Alguna solución? Gracias.
Hola Abby,
Este tutorial no es para el pedido mínimo sea gratis, sino para mostrarle al cliente cuánto le queda para que el envío sea gratis.
Hola, me gustaria mostrar la cantidad en el carrito de compra, antes del checout, ¿seria posible mostrarla? Podrías ayduarme, muchisimas gracias de antemano.
Hola Diego, el segundo pluggin para añadir lo que queda al lado del producto, no me funciona. Alguna solución? Gracias
Buenas: y para que saliera ese mensaje en el carrito en vez de en el checkout como sería. Creo que cuanto antes se lo muestres mejor pero no doy con la tecla de como mostrarlo en el carrito.
Hola Roger,
Es cambiar el hook dentro del código:
add_action( 'woocommerce_before_cart', 'dl_notificacion_envio_carrito_checkout', 10, 0 );
function dl_notificacion_envio_carrito_checkout() {
if ( is_checkout() && WC()->cart ) {
$total = WC()->cart->get_cart_contents_total(); // Después del dto
$limit = 100.00; // Pon aquí cual es el precio del envío gratuito
// Condicional si el carrito es inferior a la cantidad
if ( $total < $limit ) { // Calcular diferencia $diff = $limit - $total; $diff_formatted = wc_price( $diff ); // Mostrar aviso wc_add_notice( sprintf( "Añade %s para tener envío gratuito!", $diff_formatted ), 'notice' ); } } }
Espero que te sirva,
Un saludo!
Hola, Diego. Tengo un problema con este código. A la hora de calcular la diferencia me suma el IVA, lo que incrementa la diferencia hasta llegar al envío gratis. ¿Sabes cómo lo podría corregir? Gracias.