I want to discount a specific product during checkout based on quantity thresholds:
- When product >= 10 units ----- discount 2 dollars per unit
- When product >= 20 units ----- discount 3 dollars per unit
Sample Desired Output example:
- Product × 10 is equal to $730.00 | Discount is $20.00 | Total after discount: $710.00
- Product × 20 is equal to $1460.00 | Discount is $60.00 | Total after discount: $1400.00 $1,400.00
so far I have this, but when I add 10 units of the product to cart I get a critical error.
My code:
add_action( 'woocommerce_before_calculate_totals', 'quantity_based_pricing', 9999 );
function 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 = 10; // Change price if items > 10
$discount1 = 0.02739726027; // Reduce 73 dollar unit price by 2 dollars
$threshold2 = 20; // Change price if items > 20
$discount2 = 0.04109589041; // Reduce 73 dollar unit price by 3 dollars
//compare
foreach ( $cart->get_cart() as $cart_item_key => $cart_item )
// Get product id
$product_id = $cart_item['product_id'];
if ( $cart_item['quantity'] >= $threshold1 && $cart_item['quantity'] < $threshold2 && $cart_item = '283' ) {
$price = round( $cart_item['data']->get_price() * ( 1 - $discount1 ), 2 );
$cart_item['data']->set_price( $price );
} elseif ( $cart_item['quantity'] >= $threshold2 && in_array( $product_id, $specific_product_ids ) ) {
$price = round( $cart_item['data']->get_price() * ( 1 - $discount2 ), 2 );
$cart_item['data']->set_price( $price );
}
}
What am I doing wrong? How to make that work without errors?