Discount based on cart items count and product categories

I am trying to add a custom cart discount based on a minimal cart item count and categories.
I have take the code from this answer:
Cart discount based on cart item count and only for items that are not in sale

I have made some changes to it and this is my code:

add_action('woocommerce_cart_calculate_fees' , 'my_custom_discount', 10, 1);
function my_custom_discount( $cart_object ){

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

        // Only when there is 4 or more items in cart
        if( $cart_object->get_cart_contents_count() >= 4):

        // Defining variables
            $categories = array('mycategory1','mycategory2');
            $has_category = false;

        // Iterating through each item in cart
        foreach( $cart_object->get_cart() as $cart_item ){
            // Getting an instance of the product object
            $_product = new WC_Product( $cart_item['product_id'] );

            // If a cart item has the category
            if(has_category($category, $_product)){
                $has_category = true;
                break;
            }
       }

       ## Discount calculation ##
       $discount = $cart_object->subtotal * -0.03;

       ## Applied discount (no products on sale) ##
       if($has_category )
           $cart_object->add_fee( '3% discount', $discount);

    endif;
}

I can’t make it work.

What I am doing wrong and How to make it work?

Thanks

Read more here: Discount based on cart items count and product categories

Leave a Reply

Your email address will not be published. Required fields are marked *