La nueva gestión de la zona de envío que se introdujo con Woo 2.6 nos brinda la posibilidad de agregar una tarifa plana, envío gratuito y métodos de recogida local de forma predeterminada.
Pero, ¿qué sucede si un cliente requiere 3 tarifas diferentes según el monto del pedido ( envío escalonado )? Por ejemplo: “Para pedidos de hasta $100, envío = $5; para pedidos de hasta $250, envío = $2; para pedidos superiores a $500, envío = gratis”.
¿Es esto posible sin usar un complemento? Bueno, la respuesta, como siempre, es ¡absolutamente sí! ¡Disfrutar!
1. Envío escalonado: configuración de la zona de envío
Ve a WooCommerce > Configuración > Envío y crea tu zona de envío. En el ejemplo, me dirigiré a clientes de EE. UU. y le agregaré 3 métodos de envío: tarifa plana, tarifa plana y envío gratuito.

2. Envío escalonado: configuración de métodos de envío
Abra cada uno de los métodos de envío agregados previamente a la zona y cámbieles el nombre / configúrelos así:
- Tarifa plana n.º 1 > cambie el nombre a «Pedidos por debajo de $100» y asigne un costo = $5
- Tarifa plana n.º 2 > cambie el nombre a «Pedidos por debajo de $250» y asigne un costo = $2
- Envío gratis > seleccione «Requiere un pedido mínimo» = $500
Aquí está una de las configuraciones del método:

3. Envío escalonado – Fragmento de PHP
Ahora debemos «decirle» a WooCommerce que, según el monto del pedido, se debe usar una tarifa plana en lugar de la otra. Solo de esta manera podemos mostrar el método de envío correcto al usuario final.
Primero, tome nota de la identificación única de las dos tarifas planas. Deben verse algo así como » tarifa_plana: 9 «. Para obtener más información sobre cómo encontrarlo, consulte el párrafo «Cómo encontrar el ID de clase de envío» aquí: https://businessbloomer.com/woocommerce-disable-free-shipping-if-cart-has-shipping-class
Segundo, ¡vamos a codificar! Tendremos que «desestablecer» la tarifa plana #2 si tenemos menos de $100, de lo contrario, necesitaremos «desestablecer» la tarifa plana #1.
/** * @snippet Tiered Shipping Rates | WooCommerce * @how-to Get CustomizeWoo.com FREE * @author Rodolfo Melogli * @testedwith WooCommerce 5.0 * @donate $9 https://businessbloomer.com/bloomer-armada/ */ add_filter( 'woocommerce_package_rates' , 'bbloomer_woocommerce_tiered_shipping' , 10, 2 ); function bbloomer_woocommerce_tiered_shipping( $rates , $package ) { $threshold = 100; if ( WC()->cart->subtotal < $threshold ) { unset( $rates [ 'flat_rate:1' ] ); } else { unset( $rates [ 'flat_rate:2' ] ); } return $rates ; } |