WooCommerce – Descuento progresivo condicional basado en el número de artículos en el carro

Me gustaría tener un descuento progresivo condicional basado en el número de artículos en el carrito. Después de agregar 2 productos al carrito, obtiene un descuento. Más productos que añadas y más descuentos que obtienes.

Por ejemplo:

  • 1 producto – precio completo (sin descuento)
  • 2 productos – precio completo con 10% de descuento del precio combinado
  • 3 productos – precio completo con 15% de descuento del precio combinado
  • 4 productos – precio completo con 20% de descuento del precio combinado
  • Y así …

Tengo búsqueda en internet sin ningún éxito. Al buscar descuentos, me caigo en la función de cupones de WooCommerce o recibo un código incorrecto anterior …

¿Alguna idea? ¿Cómo puedo hacerlo?

¿Es posible?

Gracias.

Sí, es posible usar un truco para lograr esto. Normalmente, para descuentos en el carro que utilizamos en los cupones de WooCommerce. Aquí los cupones no son apropiados. Usaré aquí una tarifa condicional negativa, que se convierte en un descuento .

Entonces aquí está este código:

/* The calculation: * — The count => Based on quantity by item and total of items in cart * — The percent is 0.05 (5%) and it grows with each additional item (as you asked) * — I add the subtotal of each item line to get the total sum… */ function cart_progressive_discount() { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; $cart_count = 0; $cart_lines_total = 0; foreach(WC()->cart->get_cart() as $item_key => $cart_item){ // Adds the quantity of each item to the count $cart_count = $cart_count + $cart_item["quantity"]; // Adds The items subtotal to total $cart_lines_total += $cart_item["line_total"]; } // percent is 5% $percent = -0.05; // We fix the discount max to 50% (-0.05 * 10) $cart_count_max = 10; // Discount calculations: $discount = $percent * $cart_count * $cart_lines_total; $discount2 = $percent * $cart_count_max * $cart_lines_total; $discount_text = __( 'Quantity discount', 'woocommerce' ); // For 0 or 1 item if( $cart_count < 2 ) { return; } // Between 2 and 9 items, progressive incremental discount based on item quantity (From 10% to 45%) elseif( $cart_count > 1 && $cart_count < 10) { WC()->cart->add_fee( $discount_text, $discount, false ); } // Up to 9 items (Fixed discount at 50%) else { WC()->cart->add_fee( $discount_text, $discount2, false ); } } add_action( 'woocommerce_cart_calculate_fees','cart_progressive_discount' ); 

Naturalmente, esto va en el archivo function.php de su tema hijo activo (o tema) o también en cualquier archivo de complemento.

Este código está probado y funciona.

Aquí el descuento no está sujeto a impuestos, ver en la última referencia a continuación.


Referencias

  • WooCommerce – Agregar tarifa de envío para el plan de usuario gratuito
  • WooCommerce: crea un conjunto de cupones que añaden una tarifa fija a un pedido
  • Clase WooCommerce – Método WC_Cart – add_fee ()