Set up shipping zones, shipping methods, and shipping costs

Reading time approx.: 15 minutes

With the WooCommerce shipping settings, you determine where you ship goods, which shipping options are offered to your customers, and how high the shipping costs are.

WooCommerce uses so-called Shipping zones. A shipping zone describes a geographical area, such as Switzerland, Germany, or a specific region. Within each zone, you then define which shipping methods are available there.

The basic logic is:

Customer address
↓
matching shipping zone
↓
available shipping methods
↓
shipping costs

Once you understand this sequence, WooCommerce shipping configuration becomes much easier.

Important: WooCommerce Core includes basic shipping functions. Complex rules based on weight, dimensions, distance, or parcel service rates may require additional extensions.

Where do you find the shipping settings? #

You can find the shipping configuration in the WordPress backend under:

WooCommerce
→ Settings
→ Shipping

There you manage in particular your shipping zones, the general shipping settings and the shipping classes.

If the shipping area is not available, you should check under WooCommerce → Settings → General Check for which countries your shop sells or ships to and whether shipping has been deactivated there.

What is a shipping zone? #

A shipping zone is a geographical area for which specific shipping methods and shipping costs apply.

A simple Swiss shop could, for example, use the following structure:

Shipping zoneAreaPossible shipping method
SwitzerlandSwitzerlandFlat rate CHF 9.00
LiechtensteinLiechtensteinFlat rate CHF 12.00
GermanyGermanyFlat rate CHF 18.00

These amounts are merely examples. You decide for yourself which countries you ship to and what shipping costs you charge.

A customer only sees the shipping methods that are available for the shipping zone of their address.

Each customer belongs to only one shipping zone #

This point is particularly important for understanding WooCommerce shipping logic.

WooCommerce does not collect all shipping methods from all zones that might somehow match the customer's address.

Instead, WooCommerce searches for first matching shipping zone. Only the shipping methods of this zone are used for the customer.

Assuming you have the following zones:

Zone 1:
Chur

Zone 2:
Switzerland

An address in Chur generally fits both the inner zone „Chur“ and the general zone „Switzerland“.

If „Chur“ appears above „Switzerland“, WooCommerce uses the more specific zone „Chur“.

The customer will then only receive the shipping methods that you have set up within this zone.

Important: The order of your shipping zones can determine which shipping method a customer sees. Specific zones should therefore be placed before more general zones.

Why the order of shipping zones matters #

An example makes the logic clear.

You want to offer free local delivery within Chur, but charge CHF 9.00 shipping for the rest of Switzerland.

Then the order could look like this:

1. Chur
   → free

2. Switzerland
   → CHF 9.00

If the general „Switzerland“ zone precedes the more specific zone, it may already match the address. WooCommerce will then not search any further for a more specific zone underneath it.

If a shipping method does not appear as expected for a specific customer, you should therefore always check the order of the shipping zones as well.

Create a new shipping zone #

Open:

WooCommerce
→ Settings
→ Shipping
→ Shipping zones

Then select the function to add a new zone.

For a shipping zone you first need:

  • a name for the zone
  • the geographical regions belonging to this zone

The name serves primarily for your own orientation.

For example:

Switzerland

Germany

EU

Local delivery Chur

Then you determine which countries or regions belong to this zone.

A zone can contain multiple regions #

You do not necessarily have to create a separate shipping zone for every country.

If the same shipping conditions apply to multiple countries, you can combine them into a single zone.

For example:

Shipping zone:
Switzerland & Liechtenstein

Regions:
Switzerland
Liechtenstein

Shipping:
CHF 9.00

A common zone makes sense if the shipping methods and costs are actually identical.

If you need different prices or shipping methods, you should use separate zones.

Limit shipping zone to postal codes #

WooCommerce allows you to further restrict a shipping zone.

This allows you, for example, to use a shipping zone only for specific postal codes.

This can make sense for local delivery areas.

For example, you could define a smaller delivery area and give it different shipping conditions than the rest of Switzerland.

Here too, the following applies: such a specific zone must come before the more general zone in the correct order.

Locations that are not covered by your other zones #

At the end of the shipping zones, WooCommerce has a special zone for locations that are not covered by any of your self-defined zones.

This functions as a catchment area.

Simplified:

Customer address
↓
does not match any defined zone
↓
„Locations not covered by your other zones“

You can also add shipping methods to this zone.

However, if you do not set up a shipping method there, customers who only fall into this catch-all zone will not have a shipping option available.

This may be intentional: If you only want to ship to certain countries, you don't automatically have to offer a shipping method for the rest of the world.

Which shipping methods does WooCommerce Core include? #

Within a shipping zone, you can add shipping methods.

WooCommerce Core includes three basic shipping methods:

Shipping methodUse
Flat rateYou define a fixed or calculated shipping price.
Free shippingShipping is free or is offered for free under certain conditions.
Local pickupThe customer is picking up the order themselves.

Additional shipping plugins can add further methods.

For example, if you have installed a shipping method from a parcel service or a weight-based shipping solution, it may also appear in the selection.

Add a shipping method to a zone #

Open the desired shipping zone and select:

Add shipping method

Then select the desired method and add it to the zone.

Afterwards, you can configure the shipping method.

You can also offer multiple shipping methods within the same zone.

For example:

Switzerland

Standard shipping
CHF 9.00

Express shipping
CHF 18.00

Pickup
CHF 0.00

If multiple methods for the shopping cart are available, the customer can choose between the offered options.

Set up flat rate shipping #

The WooCommerce shipping method Flat rate or rather Flat Rate is suitable for a fixed shipping rate.

Open the corresponding shipping method within the shipping zone.

There, among other things, you can set:

  • the name the customer sees
  • the tax status
  • the shipping costs

A simple example:

Name:
Standard shipping

Cost:
9.00

The customer will then see in the shopping cart or checkout, for example:

Standard shipping: CHF 9.00

The name of the shipping method is visible to the customer #

Use a comprehensible name.

Instead of an internal designation like:

Zone CH Rate 1

is for example:

Standard shipping

easier for a customer to understand.

If the designation promises a specific shipping speed or a particular parcel service, this text should of course also correspond to your actual shipping process.

Tax status of shipping costs #

With the flat rate, you can specify whether the shipping costs are taxable.

How WooCommerce calculates the appropriate tax depends on your tax and shipping tax settings.

Whether shipping costs are taxable in your specific business and which rate applies is, on the other hand, a tax question.

We explain the technical tax configuration in the article Properly setting up taxes and VAT in WooCommerce.

A flat rate does not necessarily mean always the exact same amount #

The cost field of the WooCommerce flat rate can contain more than just a single number.

WooCommerce also supports calculation variables there.

For example, it can:

[qty]

be used for the number of articles in question.

A simplified example:

5 * [qty]

would calculate the costs based on the quantity.

WooCommerce supports further calculation options for the flat rate. For a simple shop, however, a fixed amount is much easier to understand and less prone to errors.

Recommendation for beginners: If your shipping model works with a standard flat rate, start with a simple flat fee. You should only use complex formulas if you actually need them and have fully tested them.

Set up free shipping #

WooCommerce has its own shipping method Free shipping.

Add this method to the desired shipping zone.

You can then specify the conditions under which free shipping should be available.

Depending on the configuration, free shipping can, for example:

  • be available without further requirements,
  • require a valid voucher,
  • require a minimum order value,
  • or depend on a combination of voucher and minimum order value.

Example: Free shipping from a minimum amount #

Assuming you would like to offer free shipping within Switzerland for orders starting from CHF 100.00.

Then you could set up two shipping methods in the „Switzerland“ zone:

Standard shipping
CHF 9.00

Free shipping
from CHF 100.00

If the cart meets the condition for free shipping, this method becomes available.

Please note that other equally valid shipping methods do not necessarily disappear automatically. Which methods are displayed depends on your configuration.

Free shipping with a voucher #

You can also combine free shipping with a WooCommerce coupon.

For this, on the one hand, the voucher must allow its use for free shipping.

On the other hand, within the relevant shipping zone, the shipping method Free shipping set up and configured accordingly.

So the voucher page alone does not create a shipping method.

We explain how to set up the voucher in the article Creating coupons and discount codes in WooCommerce.

Offer pickup #

WooCommerce Core also supports order pickup.

For classic shipping zones, the shipping method can be used for this Local pickup or rather Local Pickup be used.

Modern block-based WooCommerce checkouts also feature a separate local pickup solution integrated into the checkout.

Which interface you see can therefore depend on whether your shop uses the classic or the block-based checkout.

For the customer, pickup generally means that the order is not shipped to a regular delivery address, but can be collected at an offered location.

Shipping classes are not shipping zones #

WooCommerce also has so-called Shipping classes.

These are often confused with shipping zones, but they serve a completely different purpose.

Shipping zoneShipping class
Relates to the customer's location.Relates to the type of a product.
Example: SwitzerlandExample: Bulky waste
Determine which shipping methods are available.Can be used by a shipping method for different costs.

A shipping class can, for example, group products that need to be shipped differently due to their size or nature.

A shipping class alone does not calculate shipping costs #

This point is important:

A shipping class is merely a shipping product group.

If you have a shipping class named:

Bulky waste

you create and assign to a product, this does not yet incur any additional shipping costs.

The shipping class must be used by a shipping method, for example by the WooCommerce flat rate.

Product
↓
Shipping class „Bulky goods“
↓
Flat rate uses this shipping class
↓
Additional shipping costs

Create shipping classes #

You can find shipping classes under:

WooCommerce
→ Settings
→ Shipping
→ Classes

You can create a new shipping class there.

For example:

Name:
Bulky waste

Slug:
bulky-waste

You can add a description for internal orientation.

Assign shipping class to a product #

After creating a shipping class, you can assign it to a product.

To do this, open the product in question and go to the shipping settings within the product data.

There you can select the desired shipping class.

For variable products, shipping classes can also be relevant at the individual variation level, depending on the product configuration.

Use shipping classes with a flat rate #

If shipping classes exist, the WooCommerce flat rate displays additional cost fields for these classes.

A simplified example:

Base costs:
CHF 9.00

Shipping class „Bulky goods“:
CHF 15.00

The costs of the shipping class are taken into account in addition to the base costs according to the configuration.

If you want to calculate shipping costs exclusively via shipping classes, the standard base amount can also be set to 0 or left blank.

What happens when there are multiple shipping classes in the cart? #

With the flat rate, you can determine how WooCommerce handles multiple shipping classes within the same order.

WooCommerce offers two calculation methods for this:

CalculationEffect
Per classThe shipping costs of the existing shipping classes are taken into account individually.
Per orderWooCommerce uses the cost of the most expensive available shipping class.

An example:

Shipping class Small:
CHF 5.00

Shipping class Bulky goods:
CHF 20.00

When calculating per class both class fees can be taken into account.

When calculating per order only the most expensive shipping class is taken into account for the shipping classes.

Which variant makes sense for your shop depends on how you calculate the actual shipping costs.

Weight-based shipping costs #

Many shop owners want to calculate shipping costs, for example, like this:

up to 2 kg:
CHF 9.00

2 to 10 kg:
CHF 12.00

over 10 kg:
CHF 20.00

Such a general tiering based on the total weight of the shopping cart does not belong to the simple graphical rule management of the WooCommerce core shipping configuration.

Therefore, additional shipping extensions are often used for convenient weight-based rules.

What possibilities such an extension offers depends on the plugin used.

Important: Do not confuse a shipping class with an automatic weight tier. A shipping class groups products. It does not automatically read the total weight of the cart and create arbitrary weight tiers from it.

Shipping costs by order value #

Even complex gradations such as:

up to CHF 50:
CHF 12 shipping

CHF 50 to CHF 100:
CHF 8 shipping

from CHF 100:
free

cannot be comfortably mapped in just any form via a single WooCommerce core flat rate.

Free shipping from a minimum order value can be achieved using the core method Free shipping set up.

For several complex price tiers and conditions, however, additional shipping extensions can be useful or necessary.

Live rates from Post, DHL, UPS and other parcel services #

WooCommerce Core does not automatically query the current shipping rates of a parcel service.

For example, if you want the checkout to calculate a current rate for a specific parcel service based on the order, you need a suitable integration or extension.

The same applies to functions such as:

  • automatic shipping labels
  • direct tariff queries with the parcel service
  • Tracking Integration
  • automatic shipment data

Such features are not part of the standard WooCommerce core shipping zone management.

Shipping costs will be calculated once WooCommerce knows the location #

WooCommerce needs to know which shipping zone a customer belongs to.

The system requires the corresponding location information for this.

Depending on your WooCommerce settings, the location can initially be assumed via a default customer location, for example, or determined later based on the address entered by the customer.

Therefore, the displayed shipping method can change in the cart or checkout as soon as the customer enters their actual address.

Hide shipping costs up to the address #

Under the general shipping settings, you can configure WooCommerce so that shipping costs are only displayed once an address has been entered.

This can be useful if it is not yet reliably certain which shipping zone must be used without a customer address.

You can also specify whether a shipping cost calculator is offered on the cart page.

Which address does WooCommerce use for shipping? #

In the shipping settings, you can define how WooCommerce handles billing and shipping addresses.

Depending on the configuration, either the shipping address or the billing address can be used by default, or shipping can be restricted to the billing address.

This is not the same as the setting for which address to Tax calculation is used.

Note: Shipping address and tax calculation address are two separate WooCommerce settings. They can be related, but should not be confused with each other.

Shipping method does not appear – check the zone first #

If a customer does not see an expected shipping method, you should first check which shipping zone WooCommerce is using for their address.

Check in particular:

  • Customer country
  • Region or canton/state
  • Postal code
  • Order of shipping zones
  • Shipping methods activated in the zone
  • Conditions for free shipping

Only after that should you look for more complicated causes.

Shipping debug mode helps with troubleshooting #

WooCommerce has a debug mode in the shipping settings.

When you activate it, WooCommerce can display in the frontend which shipping zone has been detected for the current customer address. In addition, the shipping rate cache is bypassed for troubleshooting.

This is especially helpful if, for example, you expect:

Address in Chur
→ Zone „Chur“

WooCommerce, but apparently a different zone was used.

After troubleshooting: Disable the shipping debug mode again. It is intended for diagnostics and not for normal store operation.

Multiple shipping methods can appear simultaneously #

If a shipping zone contains multiple valid shipping methods, WooCommerce can also offer the customer multiple options.

For example:

Standard shipping:
CHF 9.00

Express:
CHF 18.00

Free shipping:
CHF 0.00

When free shipping becomes available, it does not automatically mean that all paid methods disappear in every configuration.

In the current WooCommerce shipping settings, there is an option to hide shipping rates when free shipping is available.

Whether you use these depends on whether your customers should still be able to choose a paid, faster shipping method, for example, despite free standard shipping.

A sensible, simple structure #

For a shop with a manageable shipping area, the configuration should remain as simple as possible.

An example could be:

Zone: Switzerland
→ Standard shipping CHF 9.00
→ Free shipping on orders over CHF 100.00

Zone: Germany
→ Standard shipping CHF 18.00

Uncovered locations
→ No shipping method available

This clearly defines where deliveries are made and which shipping options apply there.

Only when your actual shipping process becomes more complex should you introduce additional classes, rules, or extensions.

Always test shipping configurations with real addresses #

After setting up the shipping zones, you should not only check whether the settings in the backend look correct.

Test the shopping cart and checkout with sample addresses from all major shipping regions.

For example, if you have set up the Switzerland and Germany zones, test at least:

a Swiss address

a German address

an address outside of your shipping zones

If you also use a local postal code zone, test an address both inside and outside this zone.

Also test limit values #

With free shipping from a minimum order value, you should test at least one cart just below and one cart at or above the threshold.

For example:

Minimum order value:
CHF 100.00

Test 1:
CHF 99.00

Test 2:
CHF 100.00

This is how you instantly recognize whether the shipping condition works the way you intended.

Control shipping costs and taxes together #

If your shipping costs are set up as taxable, you should also check the tax calculation during a test order.

Check:

Value of goods
+
Shipping costs
+
Taxes
=
Total amount

If the final amount is incorrect, you should find out whether the cause lies in the shipping or the tax configuration.

You can find more about tax calculation in the article Properly setting up taxes and VAT in WooCommerce.

WooCommerce does not know your actual shipping costs #

If you enter a flat rate of CHF 9.00, WooCommerce will use this value.

WooCommerce does not automatically check whether your package actually costs CHF 8.50, CHF 9.00, or CHF 12.00 with your actual shipping provider.

Therefore, you are responsible for setting up your shipping rates so that they match your actual shipping model.

For automated rate inquiries of a parcel service, you need a corresponding integration.

If the shipping costs are incorrect #

If you encounter unexpected shipping costs, you should proceed systematically.

Check first:

  • What address did the customer enter?
  • Which shipping zone fits this address?
  • Are the shipping zones in the correct order?
  • Which shipping methods are in this zone?
  • What costs are entered for the shipping method used?
  • Are there shipping classes?
  • What shipping class does the product have?
  • Is free shipping active and are its conditions met?
  • Does an additional shipping plugin change the calculation?

If the zone assignment is unclear, you can also use the WooCommerce shipping debug mode.

We will discuss this later for further technical troubleshooting Systematically finding WooCommerce issues: status, logs, and error diagnostics.

What's next? #

After products, taxes, and shipping are set up, payment is still missing for a working checkout.

In the next article, we therefore explain Setting up and managing payment methods in WooCommerce.

Summary #

WooCommerce organizes shipping via Shipping zones. A shipping zone describes a geographic area and contains the shipping methods that customers in that area can use.

WooCommerce always uses the for a customer address first matching shipping zone. Therefore, specific zones must come before general zones.

WooCommerce Core contains the basic shipping methods Flat rate, Free shipping and Pickup. Within a zone, you can offer multiple shipping options.

Shipping classes are used to group products for different shipping costs. A shipping class alone does not calculate shipping costs, but must be used by a shipping method such as flat rate.

Complex calculations based on weight, distance, or a parcel service's current rates, as well as shipping labels and tracking, require additional extensions depending on the desired function.

Test your shipping configuration after every change with realistic customer addresses and shopping carts. This way, you can detect incorrect zone assignments and shipping costs before real customers place orders.

Last updated September 13, 2026
Was this article helpful?
Content
Cookie Consent with Real Cookie Banner