BEFORE and AFTER adding the snippets, make sure you clear your WooCommerce cache (WooCommerce → System Status → Tools → WC Transients → Clear transients), as shipping methods are cached.
/** * Hide shipping rates when free shipping is available. * Updated to support WooCommerce 2.6 Shipping Zones. * * @param array $rates Array of rates found for the package. * @return array */ function my_hide_shipping_when_free_is_available( $rates ) { $free = array(); foreach ( $rates as $rate_id => $rate ) { if ( 'free_shipping' === $rate->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 );
Source: https://docs.woothemes.com/document/hide-other-shipping-methods-when-free-shipping-is-available/