function remove_free_shipping_items( $packages ) { foreach( $packages as $i => $package ){ foreach ( $package['contents'] as $key => $item ) { if ( $item['data']->get_shipping_class() == 'free' ) { unset( $packages[$i]['contents'][$key] ); add_filter( 'woocommerce_cart_needs_shipping', '__return_true' ); } } } return $packages; } add_filter( 'woocommerce_cart_shipping_packages', 'remove_free_shipping_items' );