function my_hide_shipping_when_free_is_available($rates){$free=array();foreach ($rates as $rate_id=&gt;$rate){if ('free_shipping'===$rate-&gt;method_id){$free[$rate_id]=$rate;break}}return ! empty($free) ? $free: $rates}add_filter('woocommerce_package_rates','my_hide_shipping_when_free_is_available',100);