Cart discount based on cart item count and only for items that are not in sale Cart discount based on cart item count and only for items that are not in sale wordpress wordpress

Cart discount based on cart item count and only for items that are not in sale


Here is a custom hooked function that will apply to cart a discount, if there is 5 or more items in cart and no products on sale:

add_action('woocommerce_cart_calculate_fees' , 'custom_discount', 10, 1);function custom_discount( $cart ){    if ( is_admin() && ! defined( 'DOING_AJAX' ) )        return;    // Only when there is 5 or more items in cart    if( $cart->get_cart_contents_count() >= 5):        // 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 ##        $discount = $cart->subtotal * -0.1;        ## Applied discount (no products on sale) ##        if(!$is_on_sale )            $cart->add_fee( '10% discount', $discount);    endif;}

This code goes in function.php file of your active child theme (or theme) or also in any plugin file.

This code is tested and works perfectly.