WooCommerce: precios dinámicos a granel sin un complemento

Está buscando asignar diferentes precios unitarios en función de la cantidad agregada al carrito , por ejemplo, del 1 al 100, el precio es de $ 5, del 101 al 1000, el precio es de $ 4,90 y, a partir de 1001 unidades, el precio pedido se convierte en $ 4,75.

Existen muchos complementos de "precios dinámicos" (y el número 2 en este artículo se adaptaría a reglas de precios complejas y descuentos dinámicos), pero esta vez quiero enseñarte un código simple para la fijación de precios basada en la cantidad de WooCommerce DIY .

Como de costumbre, los comentarios y las acciones son muy apreciados. ¡Disfrutar!

Captura de pantalla de un producto de WooCommerce con un precio de 34 € por unidad por debajo de nuestros umbrales de precios al por mayor (más capturas de pantalla a continuación)

Fragmento de PHP: cambiar el precio del producto según la cantidad agregada al carrito (precio al por mayor)

En nuestro ejemplo, el precio de nuestro producto es de 34€ y quiero aplicar un 5% de descuento por encima de 100 unidades y un 10% de descuento por encima de 1000 unidades. Las capturas de pantalla para el umbral 1 y el umbral 2 están debajo del fragmento.

/**
 * @snippet       Bulk (Dynamic) Pricing - WooCommerce
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 3.8
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */
 
add_action( 'woocommerce_before_calculate_totals', 'bbloomer_quantity_based_pricing', 9999 );
 
function bbloomer_quantity_based_pricing( $cart ) {
 
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
 
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;
 
    // Define discount rules and thresholds
    $threshold1 = 101; // Change price if items > 100
    $discount1 = 0.05; // Reduce unit price by 5%
    $threshold2 = 1001; // Change price if items > 1000
    $discount2 = 0.1; // Reduce unit price by 10%
 
    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
      if ( $cart_item['quantity'] >= $threshold1 && $cart_item['quantity'] < $threshold2 ) {
         $price = round( $cart_item['data']->get_price() * ( 1 - $discount1 ), 2 );
         $cart_item['data']->set_price( $price );
      } elseif ( $cart_item['quantity'] >= $threshold2 ) {
         $price = round( $cart_item['data']->get_price() * ( 1 - $discount2 ), 2 );
         $cart_item['data']->set_price( $price );
      }   
    }
    
 }
Umbral 1 alcanzado: 5% de descuento
Umbral 2 alcanzado: 10% de descuento

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir