This customization is helpful when the store owners want to spike up the sales of a particular product by offering deals in a consistent pattern of BOGO-like discounts. This code will let you to add a 50% discount to product A on purchase of every 3rd item of product A, and the discount amount increases by 50% of the product price for every 3rd item added to the cart
add_action('woocommerce_cart_calculate_fees', 'ts_custom_discount_based_on_logic', 10, 1); function ts_custom_discount_based_on_logic($cart) { if (is_admin() && !defined('DOING_AJAX')) return; // YOUR SETTINGS: $targeted_product_id = 54; // Set HERE your targeted product ID // Initializing variables $discount = $qty_notice = 0; $parent_prices = array(); // Loop through cart items foreach ($cart->get_cart() as $key => $cart_item) { if (in_array($targeted_product_id, [$cart_item['product_id'], $cart_item['variation_id']])) { $quantity = (int) $cart_item['quantity']; $qty_notice += $quantity; // Collect the price of the parent product $parent_prices[] = floatval($cart_item['data']->get_price()); } } // Check if the quantity is a multiple of 3 if ($qty_notice % 3 == 0) { // Calculate the number of items to apply the discount $discounted_items = $qty_notice / 3; // Apply 50% discount on every 3rd item $discount -= $discounted_items * floatval($parent_prices[0]) * 0.5; } // Applying the discount if ($discount != 0) { $cart->add_fee('Custom Discount', $discount, true); // Displaying a custom notice (optional) wc_clear_notices(); // clear other notices on the checkout page. if (!is_checkout()) { wc_add_notice(__("50% discount applied on every 3rd item."), 'notice'); } } // Display a custom notice on the cart page when quantity is not enough elseif ($qty_notice > 0 && $qty_notice % 3 != 0) { wc_clear_notices(); // clear other notices on the checkout page. if (is_cart()) { wc_add_notice(__("Add more items to get the 50% discount on every 3rd item."), 'notice'); } } }
Output
When a customer purchases the specified product as defined in the code, and if the targeted product id is added to the cart with 1 quantity, the below shown notification appears to prompt customers to get a discount for the 3rd item.
Scenario: When Quantity is 3
When a customer purchases the specified product as defined in the code, the loop iterates through the cart items, and since the quantity is a multiple of 3, a 50% discount is applied for each 3rd item.
Discount Amount=⌊3/3​⌋×50%×Product Price
Scenario : When Quantity is 6
- The loop iterates through the cart items, and since the quantity is a multiple of 3, a 50% discount is applied for each 3rd item.
- Discount Calculation: Discount Amount=2Ă—50%Ă—Product PriceDiscount Amount=2Ă—50%Ă—Product Price (Two 3rd items receive a 50% discount each).
Scenario : When Quantity is 9
- Again, the loop iterates through the cart items, and as the quantity is a multiple of 3, a 50% discount is applied for each 3rd item.
- Discount Calculation: Discount Amount=3Ă—50%Ă—Product PriceDiscount Amount=3Ă—50%Ă—Product Price (Three 3rd items receive a 50% discount each).
You can also provide discount tiers based on a defined quantity range. Check out here on how to add dynamic bulk WooCommmerce discount tiers based on quantity.