En WooCommerce, puedes implementar reglas de descuento avanzadas según la cantidad de productos en el carrito. Aunque existen plugins para lograr esto, hacerlo mediante código personalizado te da más flexibilidad y control. En este artículo, aprenderás a aplicar descuentos automáticos usando PHP.
Usar el hook
woocommerce_cart_calculate_fees
woocommerce_cart_calculate_fees
El hook
woocommerce_cart_calculate_fees
woocommerce_cart_calculate_fees
permite añadir cargos adicionales o descuentos al carrito de compras. Usaremos este hook para implementar el descuento basado en la cantidad de productos.
Ejemplo básico: Descuento para compras de 10 o más productos
add_action( 'woocommerce_cart_calculate_fees', 'applyQuantityBasedDiscount' );
function applyQuantityBasedDiscount( $cart ) {
// Asegúrate de que no se ejecute en el backend.
if ( is_admin() && !defined( 'DOING_AJAX' ) ) {
// Cantidad mínima para aplicar el descuento.
// Descuento en porcentaje.
$discountPercentage = 10;
// Calcula la cantidad total de productos en el carrito.
$totalQuantity = $cart->get_cart_contents_count();
if ( $totalQuantity >= $minQuantity ) {
$discount = $cart->subtotal * ( $discountPercentage / 100 );
// Aplica el descuento como un cargo negativo.
$cart->add_fee( __( 'Quantity Discount', 'your-text-domain' ), -$discount );
<?php
add_action( 'woocommerce_cart_calculate_fees', 'applyQuantityBasedDiscount' );
function applyQuantityBasedDiscount( $cart ) {
// Asegúrate de que no se ejecute en el backend.
if ( is_admin() && !defined( 'DOING_AJAX' ) ) {
return;
}
// Cantidad mínima para aplicar el descuento.
$minQuantity = 10;
// Descuento en porcentaje.
$discountPercentage = 10;
// Calcula la cantidad total de productos en el carrito.
$totalQuantity = $cart->get_cart_contents_count();
if ( $totalQuantity >= $minQuantity ) {
// Calcula el descuento.
$discount = $cart->subtotal * ( $discountPercentage / 100 );
// Aplica el descuento como un cargo negativo.
$cart->add_fee( __( 'Quantity Discount', 'your-text-domain' ), -$discount );
}
}
<?php
add_action( 'woocommerce_cart_calculate_fees', 'applyQuantityBasedDiscount' );
function applyQuantityBasedDiscount( $cart ) {
// Asegúrate de que no se ejecute en el backend.
if ( is_admin() && !defined( 'DOING_AJAX' ) ) {
return;
}
// Cantidad mínima para aplicar el descuento.
$minQuantity = 10;
// Descuento en porcentaje.
$discountPercentage = 10;
// Calcula la cantidad total de productos en el carrito.
$totalQuantity = $cart->get_cart_contents_count();
if ( $totalQuantity >= $minQuantity ) {
// Calcula el descuento.
$discount = $cart->subtotal * ( $discountPercentage / 100 );
// Aplica el descuento como un cargo negativo.
$cart->add_fee( __( 'Quantity Discount', 'your-text-domain' ), -$discount );
}
}
Descuentos basados en rangos de cantidad
Puedes ofrecer descuentos diferentes según la cantidad de productos en el carrito.
Ejemplo: Descuentos progresivos
add_action( 'woocommerce_cart_calculate_fees', 'applyTieredQuantityDiscount' );
function applyTieredQuantityDiscount( $cart ) {
if ( is_admin() && !defined( 'DOING_AJAX' ) ) {
$totalQuantity = $cart->get_cart_contents_count();
// Define los rangos de descuento.
if ( $totalQuantity >= 20 ) {
$discount = $cart->subtotal * 0.20; // 20% de descuento para 20 o más productos.
} elseif ( $totalQuantity >= 10 ) {
$discount = $cart->subtotal * 0.10; // 10% de descuento para 10-19 productos.
$cart->add_fee( __( 'Tiered Discount', 'your-text-domain' ), -$discount );
<?php
add_action( 'woocommerce_cart_calculate_fees', 'applyTieredQuantityDiscount' );
function applyTieredQuantityDiscount( $cart ) {
if ( is_admin() && !defined( 'DOING_AJAX' ) ) {
return;
}
$totalQuantity = $cart->get_cart_contents_count();
$discount = 0;
// Define los rangos de descuento.
if ( $totalQuantity >= 20 ) {
$discount = $cart->subtotal * 0.20; // 20% de descuento para 20 o más productos.
} elseif ( $totalQuantity >= 10 ) {
$discount = $cart->subtotal * 0.10; // 10% de descuento para 10-19 productos.
}
if ( $discount > 0 ) {
$cart->add_fee( __( 'Tiered Discount', 'your-text-domain' ), -$discount );
}
}
<?php
add_action( 'woocommerce_cart_calculate_fees', 'applyTieredQuantityDiscount' );
function applyTieredQuantityDiscount( $cart ) {
if ( is_admin() && !defined( 'DOING_AJAX' ) ) {
return;
}
$totalQuantity = $cart->get_cart_contents_count();
$discount = 0;
// Define los rangos de descuento.
if ( $totalQuantity >= 20 ) {
$discount = $cart->subtotal * 0.20; // 20% de descuento para 20 o más productos.
} elseif ( $totalQuantity >= 10 ) {
$discount = $cart->subtotal * 0.10; // 10% de descuento para 10-19 productos.
}
if ( $discount > 0 ) {
$cart->add_fee( __( 'Tiered Discount', 'your-text-domain' ), -$discount );
}
}
Descuentos basados en un producto específico
Si deseas aplicar descuentos solo cuando hay múltiples unidades de un producto específico, puedes hacerlo revisando los elementos del carrito.
Ejemplo: Descuento por comprar 5 o más de un producto específico
add_action( 'woocommerce_cart_calculate_fees', 'applyProductSpecificDiscount' );
function applyProductSpecificDiscount( $cart ) {
if ( is_admin() && !defined( 'DOING_AJAX' ) ) {
// ID del producto específico.
$targetProductId = 123; // Cambia esto por el ID de tu producto.
$minQuantity = 5; // Cantidad mínima para el descuento.
$discountPercentage = 15; // Descuento en porcentaje.
foreach ( $cart->get_cart() as $cartItem ) {
if ( $cartItem['product_id'] == $targetProductId && $cartItem['quantity'] >= $minQuantity ) {
// Calcula el descuento para el producto específico.
$discount = ( $cartItem['line_total'] * $discountPercentage ) / 100;
$cart->add_fee( __( 'Product Discount', 'your-text-domain' ), -$discount );
<?php
add_action( 'woocommerce_cart_calculate_fees', 'applyProductSpecificDiscount' );
function applyProductSpecificDiscount( $cart ) {
if ( is_admin() && !defined( 'DOING_AJAX' ) ) {
return;
}
// ID del producto específico.
$targetProductId = 123; // Cambia esto por el ID de tu producto.
$minQuantity = 5; // Cantidad mínima para el descuento.
$discountPercentage = 15; // Descuento en porcentaje.
foreach ( $cart->get_cart() as $cartItem ) {
if ( $cartItem['product_id'] == $targetProductId && $cartItem['quantity'] >= $minQuantity ) {
// Calcula el descuento para el producto específico.
$discount = ( $cartItem['line_total'] * $discountPercentage ) / 100;
// Aplica el descuento.
$cart->add_fee( __( 'Product Discount', 'your-text-domain' ), -$discount );
break;
}
}
}
<?php
add_action( 'woocommerce_cart_calculate_fees', 'applyProductSpecificDiscount' );
function applyProductSpecificDiscount( $cart ) {
if ( is_admin() && !defined( 'DOING_AJAX' ) ) {
return;
}
// ID del producto específico.
$targetProductId = 123; // Cambia esto por el ID de tu producto.
$minQuantity = 5; // Cantidad mínima para el descuento.
$discountPercentage = 15; // Descuento en porcentaje.
foreach ( $cart->get_cart() as $cartItem ) {
if ( $cartItem['product_id'] == $targetProductId && $cartItem['quantity'] >= $minQuantity ) {
// Calcula el descuento para el producto específico.
$discount = ( $cartItem['line_total'] * $discountPercentage ) / 100;
// Aplica el descuento.
$cart->add_fee( __( 'Product Discount', 'your-text-domain' ), -$discount );
break;
}
}
}
Crear descuentos basados en la cantidad de productos en WooCommerce es una excelente forma de incentivar compras más grandes y aumentar las ventas. Con los ejemplos anteriores, puedes personalizar los descuentos para satisfacer las necesidades de tu tienda.
Si tienes preguntas o necesitas más ejemplos, ¡no dudes en pedir ayuda! 