0
votes

I have a woocommerce website in which there are 2 products, one product has free shipping but other has paid shipping if they are added separately in cart. Now I have a scenario that if some customer adds both free and paid shipping products together in shopping cart then shipping should become free for that whole order. How can I achieve this?

Thanks, Mohammad

1

1 Answers

1
votes

try this... just paste this in your theme's functions.php and replace the id in $products_to_look = array( 34 ); below.

add_filter( 'woocommerce_package_rates', 'woocommerce_package_rates' );
function woocommerce_package_rates( $rates ) {

    if ( ! WC()->cart->is_empty() ) {
        $products_to_look = array( 34 ); // ids of products separated by comma.

        $found = false;

        foreach ( WC()->cart->get_cart() as $cart_item ) {
            if ( $found = in_array( $cart_item['product_id'], $products_to_look ) ) {
                break;
            }
        }
    } 
    if ( $found ) {
        foreach($rates as $key => $rate ) {
            $rates[$key]->label = 'Free shipping'; // change label to Free shipping...
            $rates[$key]->cost = 0; // cost is set to 0.
        }
    }

    return $rates;
}

Further readings: WooCommerce shipping fee that changes when condition is met