Mostrar cuánto falta para el envío gratis en el carrito de WooCommerce

Dificultad: Fácil

Un aviso del tipo «Te faltan 12,50 € para el envío gratis» en el carrito y en el checkout anima a añadir un producto más y ayuda a subir el ticket medio. Este snippet calcula la diferencia a partir del subtotal del carrito y la muestra con los avisos nativos de WooCommerce. Cambia el valor de $umbral por el importe mínimo que tengas configurado en tu método de envío gratuito.

Puedes utilizar este sencillo snippet en php desde el archivo functions.php.

Importante: no modifiques directamente el archivo functions.php del tema que tengas instalado. Genera un tema hijo con alguno de los plugins del repositorio de WordPress y actívalo. Cuando lo tengas, entra en el functions.php del tema hijo. Una alternativa es instalar algún plugin que permite incrustar código sin problema de pérdida en la actualización del tema.


/**
 * Mostrar cuánto falta para conseguir el envío gratis en el carrito y en el checkout
 */
add_action( 'woocommerce_before_cart', 'lc_aviso_envio_gratis' );
add_action( 'woocommerce_before_checkout_form', 'lc_aviso_envio_gratis' );
function lc_aviso_envio_gratis() {
    // Importe mínimo para el envío gratis (el mismo que tengas en el método de envío)
    $umbral = 50;

    if ( ! WC()->cart || WC()->cart->is_empty() ) {
        return;
    }

    // Subtotal del carrito menos los descuentos aplicados
    $total  = WC()->cart->get_displayed_subtotal() - WC()->cart->get_discount_total();
    $faltan = $umbral - $total;

    if ( $faltan > 0 ) {
        wc_print_notice( sprintf( 'Te faltan %s para conseguir el envío gratis.', wc_price( $faltan ) ), 'notice' );
    } else {
        wc_print_notice( '¡Enhorabuena! Tu pedido tiene envío gratis.', 'success' );
    }
}

Avisos nativos de WooCommerce (wc_print_notice): El mensaje hereda el estilo de tu tema y de Elementor sin añadir CSS ni JavaScript propios, y el importe se formatea con la moneda y los decimales de tu tienda gracias a wc_price.

Se refresca con el carrito: Si el carrito se recalcula por Ajax, el aviso se actualiza con él. Combínalo con el snippet para recalcular el carrito automáticamente al cambiar cantidades.

Compatibilidad: Funciona con el carrito y el checkout clásicos de WooCommerce. Si usas los bloques de «Carrito» y «Finalizar compra», estos hooks no se ejecutan y el aviso no aparecerá.

Sin carga adicional: Son unas pocas líneas de PHP que solo se ejecutan en el carrito y en el checkout, sin consultas extra a la base de datos ni archivos adicionales.