WooCommerce: envío por peso (¡sin complemento!)

Con WooCommerce Shipping Zones, puede usar PHP simple para cumplir con muchas reglas de envío «avanzadas», como el envío por peso.

Dado que muchos de los fans de Business Bloomer siempre piden este tipo de personalización, hoy veremos cómo hacerlo. Sin necesidad de un complemento más

1. Envío por Peso – Requisitos

Si usted o su cliente requieren el envío por peso, primero deben asegurarse de que TODOS los productos simples y/o variaciones individuales tengan un peso > 0 . Bastante simple, pero a veces la gente pregunta «¿Por qué no funciona el envío por peso?», ¡Y el error más común es que los productos tienen peso 0!

Además, en WooCommerce> Configuración> Productos, asegúrese de seleccionar la » Unidad de peso » correcta , otro error típico que cometen las personas (predeterminado en Kg, creo).

2. Envío por peso: configuración de métodos de envío

Puedes agregar Tarifas Planas ilimitadas a cada Zona de Envío. Además, puede cambiar el nombre de cada tarifa plana a algo así como «Pedidos de menos de 1 kg», «Pedidos de más de 10 kg», etc. para que la etiqueta de pago sea un poco más fácil de usar.

En nuestro ejemplo, configuraremos 3 niveles de peso:

  • $10 de envío para pedidos de hasta 1 kg
  • $20 de envío para pedidos de hasta 5 kg
  • $30 de envío para pedidos superiores a 5 kg

Y aquí está cómo configurar los métodos de envío de WooCommerce:

  1. Tarifa plana n.º 1 > cambie el nombre a «Pedidos de menos de 1 kg» y ​​asigne un costo = $10
  2. Tarifa plana n.º 2 > cambie el nombre a «Pedidos de menos de 5 kg» y ​​asigne un costo = $20
  3. Tarifa plana n.º 3 > cambie el nombre a «Pedidos de más de 5 kg» y ​​asigne un costo = $30

Su resultado final para la zona específica (la llamé «EE. UU. – Envío por peso») se verá así:

Envío de WooCommerce por peso (Configuración de la zona de envío)
Envío de WooCommerce por peso (Configuración de la zona de envío)

3. Envío por peso – Fragmento PHP

Ahora tenemos que “decirle” a WooCommerce que, en función del peso del carrito, se debe utilizar una Tarifa Plana en lugar de otra. Solo así podemos mostrar la tarifa plana correcta al usuario final.

Primero, toma nota del ID único de las tres tarifas planas. Deben verse algo así como » tarifa_plana: 9 «. Para obtener más información sobre cómo encontrarlos, consulte aquí: https://businessbloomer.com/woocommerce-disable-free-shipping-if-cart-has-shipping-class

En mi ejemplo anterior, tengo los siguientes ID de tasa:

  1. Tarifa Plana #1 > tarifa_plana:5
  2. Tarifa Plana #2 > tarifa_plana:6
  3. Tarifa Plana #3 > tarifa_plana:8

Segundo, ¡vamos a codificar! Tendremos que «desestablecer» las tarifas en función del peso total, por lo que en total necesitaremos 3 condiciones: cuando el peso es inferior a 1 (kg), inferior a 5 (kg) y superior a 5.

/**
 * @snippet       Shipping by Weight | WooCommerce
 * @sourcecode    https://businessbloomer.com/?p=21432
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 3.7
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */
  
add_filter( 'woocommerce_package_rates', 'bbloomer_woocommerce_tiered_shipping', 9999, 2 );
    
function bbloomer_woocommerce_tiered_shipping( $rates, $package ) {
     
     if ( WC()->cart->get_cart_contents_weight() < 1 ) {
       
         if ( isset( $rates['flat_rate:5'] ) ) unset( $rates['flat_rate:6'], $rates['flat_rate:8'] );
       
     } elseif ( WC()->cart->get_cart_contents_weight() < 5 ) {
       
         if ( isset( $rates['flat_rate:5'] ) ) unset( $rates['flat_rate:5'], $rates['flat_rate:8'] );
       
     } else {
       
         if ( isset( $rates['flat_rate:5'] ) ) unset( $rates['flat_rate:5'], $rates['flat_rate:6'] );
       
     }
    
     return $rates;
    
}

Y aquí está la prueba:

WooCommerce: demostración de envío por peso
WooCommerce: demostración de envío por peso

Deja un comentario