I found this piece of code on stackoverflow, it does what i need, except that i need to apply -5€ discount for each products right after 2 products are added in the cart.
Example:
- for 1 products in the cart the user will get 0€ discount
- for 2 products in the cart the user will get 5€ discount
- for 3 products in the cart the user will get 10€ discount
- for 4 products in the cart the user will get 15€ discount
- for 5 products in the cart the user will get 20€ discount
and so on…
add_action('woocommerce_cart_calculate_fees' , 'custom_discount', 10, 1);
function custom_discount( $cart ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) && ! is_user_logged_in() )
// if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Only when there is 2 or more items in cart
if( $cart->get_cart_contents_count() >= 2):
// Initialising variable
$is_on_sale = false;
// Iterating through each item in cart
foreach( $cart->get_cart() as $cart_item ){
// Getting an instance of the product object
$product = $cart_item['data'];
// If a cart item is on sale, $is_on_sale is true and we stop the loop
if($product->is_on_sale()){
$is_on_sale = true;
break;
}
}
## Discount calculation ##
// fixed reduction price
$reduction = 5;
## Applied discount (no products on sale) ##
if(!$is_on_sale )
$cart->add_fee( '-5€ à partir du 2ème article commandé', -$reduction);
endif;
}
Any help is appreciated.
2
Answers
You are so close.
You know the number of items in cart
$cart->get_cart_contents_count()
and you want the discount to start after the first product.Replace
$reduction = 5;
with this
$reduction = 5*($cart->get_cart_contents_count() - 1);
Your full code should look like this:
You should better use the following that will count only regular items (not "on sale" items) and will apply a discount based on that specific count starting on the 2nd item:
Code goes in functions.php file of your active child theme (or active theme). Tested and works.
Some related similar answers threads:
Addition – Excluding a product category: