We are very glad to tell you that Flexible Shipping has grown into Octolize. Read more!

WooCommerce Shipping Zones Explained

WooCommerce Shipping Zones Explained
Author Maciej Swoboda
Reading time:
6 minutes read

WooCommerce Shipping Zones introduced in version 2.6 are a killer feature making advanced shipping methods a standard. Adding the Zones gives you more flexibility and allows i.a. to offer your customers the zone-specific methods. Let’s get to know them better!

Despite the fact that WooCommerce Shipping Zones were implemented a while ago, they’ve quickly become a commonly used feature nowadays. There is no doubt they make the difference and pushed the WooCommerce shipping to a completely new level.

Combined with the WooCommerce shipping methods they allow to target your customers more precisely and adjust the shipping to meet your business and your customers’ needs. However, in spite of all the upgrades introduced with the shipping zones’ implementation, in case of more complex shipping scenarios and better shipping management using some extra plugins such as Flexible Shipping may yet prove to be a good idea.

Flexible Shipping WooCommerce

The best and most powerful Table Rate Shipping plugin for WooCommerce. Discover its endless possibilities and create the shipping cost calculation rules based on weight, price and more!

Download for free or Go to WordPress.org
100,000+ Active Installations
Last Updated: 2022-05-12
Works with WooCommerce 6.2 - 6.5.x

What are the WooCommerce Shipping Zones?

To cut the story short the shipping zones are groups of locations where you want to ship your products to. You can easily group the continents, countries, states/provinces and even ZIP or postal codes. In other words, you can use them e.g. to:

  • offer the same shipping method or set of methods for the whole Europe,
  • define a shipping zone covering a few selected USA states e.g. FL, GA and AL,
  • narrow down the shipping area precisely to include only specific city district based on postcodes.

However, these are only a few examples of shipping zones’ usage. It’s all up to you how you configure them and which setup suits your business best.

What surely makes them a core feature is the fact that they also allow to set up the different shipping methods for each zone you’ve created and your customers will see only the ones available for their area (based on the entered address details or geolocation).

That’s enough theory. Let’s jump to practice and learn…

How to add a new Shipping Zone?

First, navigate to WooCommerce → Settings → Shipping → Shipping Zones. You should see the following screen if you haven’t created any shipping zones yet:

Adding new WooCommerce Shipping Zone
Adding new WooCommerce Shipping Zone

Hit the Add shipping zone button in the middle or the Add shipping zone at the top of the screen. You will be redirected to the new shipping zone settings:

Shipping zone configuration screen
Shipping zone configuration screen

Define its name by filling in the Zone name field and select below the Zone regions which it should cover. As I mentioned before you can set the shipping zone to cover the entire continent:

WooCommerce zone covering the whole North America territory
WooCommerce Shipping Zone covering the whole North America territory

whole country:

WooCommerce zone covering the whole USA territory
WooCommerce Shipping Zone covering the whole USA territory

selected states:

WooCommerce zone covering selected states
WooCommerce Shipping Zone covering selected states

particular city:

WooCommerce zone covering the particular city
WooCommerce Shipping Zone covering the particular city

or you can narrow it down and create the…

WooCommerce Shipping Zone based on postcodes:

UK WooCommerce Shipping Zone based on postcodes
UK WooCommerce Shipping Zone based on postcodes

Let’s stop here for a while since this type of shipping zone setup is the most precise one and deserves some more attention. Once the Limit to specific ZIP/postcodes link is clicked the additional text-area field will appear below where you can put all the postcodes you want the shipping zone to be narrowed to. What’s most important here is that you can enter them in three different ways:

  1. directly, typing the full postcodes manually one per line, e.g.:
    Postcodes list
  2. by defining their ranges, e.g. 90210…99000. If used, the shipping zone will cover all the postcodes between 90210 and 99000 such as 90211, 93123, 98157, etc.
  3. using so called wildcards and placing an asterisk sign * in right place of the postcode, e.g. AB10* wildcard will cover all the postcodes starting with ‘AB10’ phrase, e.g. AB10 1AP, AB10 1AR, AB10 1AQ and so on.
If you want to learn more about the shipping zones based on postcodes and see how they work live, please check our guide on UK Shipping Zones configuration in WooCommerce →

As you can see, for the purposes of this guide I’ve created a

shipping zone based on postcodes with wildcards

covering the Portugal capital city – Porto:

WooCommerce Porto zone based on postcodes with wildcards

Once you created the shipping zone and set it up to fit your case confirm the whole process with the Save changes button.

Next, use the Add shipping method to add one right away.

WooCommerce Add shipping method window
Add shipping method

In the popup window, which should appear, choose Flat rate, Free shipping, Local pickup or Flexible Shipping method if you have the Flexible Shipping plugin installed. Then, configure it according to your needs. You can add as many shipping methods within a shipping zone as you want.

Managing shipping methods within a shipping zone
Managing shipping methods within a shipping zone

From this point you can easily

manage the shipping methods

you’ve added within a shipping zone. Drag and drop them grabbing the Drag & drop icon icon on the left to change the order how they are displayed in the cart or checkout.

Edit or delete them with the quick links appearing on hover. Use the toggle to switch them on and off on the fly. Easy as pie, isn’t it?

Once the shipping methods are configured save the changes one more time and voila! You’ve just configured a fully functional shipping zone in your WooCommerce shop. Now let’s see…

How do the shipping zones work?

In order to explain it as precisely as possible I’ve created two shipping zones. First one narrow, based on postcodes for Porto you’ve already seen on the screeshot above and the second one – much wider covering the whole Portugal area:

Portugal WooCommerce shipping zone
Portugal shipping zone

As you can see I enabled the $50 Fixed price handled by Flat rate shipping method if shipping to Portugal and two different shipping methods – Shipping to Porto handled by Flexible Shipping with $10 fixed cost and free Local pickup named Collect locally from pickup point in Porto if shipping directly to Porto. The Flat rate and Free shipping for Porto shipping zone remain disabled.

Now, let’s go to the shop, put a sample product into the cart and see the shipping zones in action by entering the 4050-253, Porto, Portugal shipping destination address here:

Wrong shipping method displayed

But wait, what has just happened? Instead of the $10 fixed price Shipping to Porto Flexible Shipping method and free Collect locally from pickup point in Porto we’ve set for 4050* Porto postcode wildcard, the $50 Fixed price handled by Flat rate shipping method dedicated for the rest of Portugal was displayed in the cart.

In order to check what’s wrong we will need to use the…

Debug mode for shipping

Fortunately, WooCommerce has an in-built tool which comes in handy in such cases. Move on to WooCommerce → Settings → Shipping → Shipping options, enable the Debug mode at the bottom and save the changes.

WooCommerce shipping Debug mode
WooCommerce shipping Debug mode

Once you turn the Debug mode on it will show you in the cart which shipping zone was matched to the entered shipping details. It’s a great help if it comes to troubleshooting when you experience any problems with the shipping configuration and it usually sheds some light on the situation.

Go back to the cart and check what it says. At the very top of the screen you should see the relevant notice:

Wrong shipping zone matched
Portugal shipping zone matched

As it shows, the entered 4050-253, Porto, Portugal shipping destination wasn’t matched to the narrow Porto shipping zone based on postcodes but to a much wider one covering the whole Portugal area. Wondering why did it happen this way? The answer is the…

Shipping Zones order matters – how does the WooCommerce Shipping Zones matching work?

The sample address we’ve entered in the cart was simply matched to Portugal shipping zone because it was placed as first on the shipping zones list:

WooCommerce shipping zones matching order
Shipping Zones matching order

WooCommerce shipping zone matching mechanism takes the address entered in the cart and checks if it matches the defined shipping zones starting from the top to the bottom of the shipping zones list.

If the provided shipping destination matches e.g. the first zone, the next ones are not even being considered. That’s exactly what happened in our case. The 4050-253, Porto, Portugal address was matched the whole Portugal zone due to the wrong shipping zones order and placing the wider zone before the narrower one (Porto).

To solve this out we simply need to change the shipping zones order, drag & drop them and…

Sort the shipping zones starting from the narrowest at the top of the list to the widest at the very bottom.
Shipping zones ordered from the narrowest to the widest
Shipping zones ordered from the narrowest to the widest

Once the above adjustments are made, the narrower Porto shipping zone based on postcodes is considered first and it is now properly matched in the cart:

Shipping zone properly matched
‘Porto’ shipping zone properly matched

Now, when everything works properly you can go back to WooCommerce Shipping options and turn the Debug mode off.

Finally, one more feature I haven’t told you about yet but still worth mentioning is…

Locations not covered by your other zones

You might have noticed it earlier in the shipping zones table footer:

Locations not covered by your other zones
Locations not covered by your other zones

Wondering how to make use of it? Locations not covered by your other zones works similar to the standard shipping zones, however, it’s more like a fallback option.

If WooCommerce doesn’t find any matching shipping zones for the entered shipping address considering them one by one starting from the top of the table, it will finally reach its bottom. When it finds no match for such shipping destination, it will simply fall into the Locations not covered by your other zones. So, in order to prevent any possible matching issues, adding a kind of emergency shipping method here as well, e.g. the fixed price Flat rate is a good practice.

WooCommerce Shipping Zones – Wrapping up

You’ve just learned everything you need to know about the WooCommerce Shipping Zones. I showed you step by step how to create, manage and configure them to meet your business. You’ve also got across the most common issues you might encounter and found out how to deal with them. I deeply believe you are now fully ready to take care of the shipping zones setup in your WooCommerce store. If there is still something bothering you or you find something unclear, feel free to leave your questions in the comments below.

We’ve also prepared an extensive guide to WooCommerce Shipping we recommend if you want to get a better grasp of the shipping methods, classes and more.
Notify of
Inline Feedbacks
View all comments
Florian Ibe
Florian Ibe
3 years ago

Hi, nice topic but in combination with W3 Total Cache the query is slow down: W3TCDbCache_Wpdb->default_query
comment image

What can we do?

WP Desk
WP Desk
Reply to  Florian Ibe
3 years ago

Hi Florian, are you sure this is connected to our plugin?

Florian Ibe
Florian Ibe
Reply to  WP Desk
3 years ago

Yes of course. You load the shipping zones on all pages with products and not only on checkout. Thats a “problem” for performance.

WP Desk
WP Desk
Reply to  Florian Ibe
3 years ago

Thanks for pointing that out. We passed this to our developers to verify.

Florian Ibe
Florian Ibe
Reply to  WP Desk
3 years ago

Perfect. You can test it with w3 total cache. Its tables which loaded on every site with products. Hope you find the best way. If you need help, you can write me an email over http://www.pictibe.de

WP Desk
WP Desk
Reply to  Florian Ibe
3 years ago

Hi Florian,
We’ve checked the queries that are generated by our plugin, and in a clean WP/WC+FS installation we’ve found that the mentioned zone queries are produced only on cart/checkout page.
Therefore, the most probable cause of described behaviour is that there is a theme or another plugin that is calling one of the shipment hooks used in cart/checkout to which FS is hooked.

ali ammar
ali ammar
8 months ago


Last edited 8 months ago by ali ammar

Check out our case studies

Vitrek’s Story

Since 1990, Vitrek has provided innovative global solutions for High Voltage Test and Measurement. Vitrek supplies.

2 minutes read
EnglishSpeakingMum’s Story

EnglishSpeakingMum is a Polish dedicated and involved parenting blogger. She promotes the idea of raising.

2 minutes read

Join over 10,000 subscribers

Stay up to date and get WooCommerce tips & Octolize news right to your inbox!