Show only free shipping option on WooCommerce cart and checkout pages

By default WooCommerce will show all available shipping options on cart and checkout pages, if you have free shipping as an option you may just want that displayed by itself.

The code snippet below which needs to be added to your functions.php theme file will do just that…

add_filter( 'woocommerce_package_rates', 'prefix_hide_shipping_when_free_is_available', 100 );
 * 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
 * @link
function prefix_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;
	return ! empty( $free ) ? $free : $rates;

1 Comment

  1. Farah on September 5, 2021 at 5:12 pm

    Hi, i tried using this code for my website but it doesn’t work. Is there anything else that i need to make adjustment on? Upon reaching certain amount, the “free shipping” option will appear, however the other option also remain visible. which makes some of my customer not aware about the free shipping privilege they got.

    How could i possibly fix this?

Leave all Comment