0

I am looking forward on how to hide shipping at all from the checkout page of Woocommerce when only certain product (magazine) is in the cart or much better would be, if the only product/s with certain shipping class are in the cart.

If there is a combination of products (magazine + books), then shipping module should be visible.

This is what I have tried, but this always returns false. Can you help me out on this?

add_filter( 'woocommerce_package_rates', 'woocommerce_cart_shipping_total_filter_callback', 11, 2 );
function woocommerce_cart_shipping_total_filter_callback( $show_abon_shipping) {
    
    $product_id = 27733;
   $in_cart = false;
  
   foreach( WC()->cart->get_cart() as $cart_item ) {
      $product_in_cart = $cart_item['product_id'];
        if ( $product_in_cart === $product_id && count($product_in_cart) == 1) {
            $in_cart = true;
    }
   }
  
   if ( $in_cart ) {
  
     return false;
  
   }

     return $show_abon_shipping;
}

1 Answer 1

0

Solved it. Just remeber to add the same shipping class to all variations too.

add_filter( 'woocommerce_package_rates', 'custom_shipping_rates', 100, 2 );
function custom_shipping_rates( $rates, $package ) {

    $shipping_class = 506; // HERE set the shipping class ID
    $found = false;
    $productsincart = count($package['contents']);
    
    foreach( $package['contents'] as $cart_item ) {
            
        if ($productsincart == 1 && $cart_item['data'];->get_shipping_class_id() == $shipping_class){
            $found = true;
        }   
    }

    if ( $found ) {
        return false; // If not found we exit
    }else {
        return $rates;
        
    }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.