The Ultimate Guide to WooCommerce Flat rate Shipping

Flat rate shipping is the easiest shipping method to set up in WooCommerce. In this post, let’s find out how to set up flat rate shipping in WooCommerce and see how it fits to your business model.

What is flat rate shipping?

If you have sent a package via post office before, you should be familiar with flat rate shipping. As the name suggests, flat rate shipping impose an uniform shipping price on your package as long as it doesn’t exceed a certain weight or size.

For example, the shipping cost for packages less than 10 kg and 1 cubic meter is $10 per package.

The same idea applies to WooCommerce flat rate shipping.

How to add flat rate shipping in WooCommerce

By default, WooCommerce has three shipping methods

  • flat rate shipping
  • local pickup
  • free shipping

In order to use one of those method, you need to create a shipping zone first then in the zone, you can add one or more shipping methods, including flat rate.

how to add flat rate shipping to shipping zone in woocommerce

After creating the flat rate shipping method as in the above image, you can configure the rate, tax of that shipping method by clicking on the Edit link under “Flat rate”:

configure flat shipping rate and tax

As you can notice, there is a toggle button right below the Enabled title. You can enable or disable the shipping method by turn that button on or off.

Can I have multiple flat rate shipping setup?

There is no limit on number of shipping method per zone so you definitely can have multiple flat rate shipping setup, in one zone. You may wonder, why do I need multiple flat rate shipping for one zone?

One good example is you provide standard shipping at a lower rate and priority shipping at higher rate. At the cart page, customers can choose which shipping method they want to use. If they need the products to be delivered fast, they will choose the priority shipping method. Otherwise, they can choose the standard shipping method to save money on shipping.

Let’s set that up:

adding multiple flat rate shipping for one zone

Now, on the cart page, the customers will see all the shipping options available:

flat rate shipping options on cart page


How to add flat rate shipping per item using shipping classes

At this point, you should be comfortable with adding flat rate that applies to all items. What if you want to set a different shipping rate for some particular items? For example, I have a store selling computer hardware. While keyboards, mice can be shipped without much care, monitor requires special packaging and handling. I would like to charge $50 more for monitors. How can I set that up?

First we need to add a shipping class. Adding shipping class in WooCommerce is simple. Let’s go to WooCommerce->Settings->Shipping->Shipping classes and add one:

add a shipping class in woocommerce

Now, the next step would be to go the monitor and assign it the “monitor” shipping class:

assign shipping class to product

Finally, let’s configure the shipping rate for “monitor” shipping class in our shipping methods.

Let’s go to WooCommerce->Settings->Shipping->Shipping zones and edit our zones. Let edit all the enabled flat rate shipping method in that zone and add the additional fee accordingly:

add shipping cost to shipping class

Now if I go to the cart, I can see that the shipping cost is higher:

shipping cost updated after using shipping classes

If you remember, the standard shipping was $10 and the priority shipping was $30. Since we added $30 for the “monitor” shipping class, the shipping cost updated accordingly.

WooCommerce flat rate shipping by quantity

If you notice that we have 2 items in cart here. The shipping cost for the “monitor” only calculated once. What if you want to charge the additional shipping cost PER ITEM?

That’s easy, let’s go back to our shipping methods and edit each of them then enter this:

using formula to calculate flat rate shipping cost

Now, if I go to the cart page, surely I’ll see the shipping cost is calculated for all items in cart:

cart udpated after using formula

Hide flat rate shipping if free shipping is enabled

You may want to reward the customers by offering free shipping to all order exceeds $300. In this case, you also want to hide other flat rate shipping methods. What can you do to achieve this?

You’ll need to enter some code. Don’t worry, it won’t be hard.

First thing first, you need to create a child theme if you haven’t got one. Why do you need a child theme? How to create one? Find all the answers here

Now you have your child theme ready. Let’s go to its functions.php file and paste the following code:


function bc_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;
add_filter( 'woocommerce_package_rates', 'bc_hide_shipping_when_free_is_available', 100 );

add code to functions.php to hide other shipping methods when free shipping available

Click on update file and let’s go to the cart page, you’ll see that if free shipping is available, all other methods are hidden:

other shipping methods hidden when free shipping available


As you can see, flat rate shipping at first seems to be rigid and hard to customize. However, when combine with shipping classes and free shipping method, you can offer very flexible shipping options for your customers. Using WooCommerce shipping classes enables you to set the max shipping fee for an order, set the shipping fee based on the quantity and the total of the cart.



The Ultimate Guide To WooCommerce Shipping Classes

WooCommerce provides some good options that help you offer flexible shipping to your customers. Shipping classes are ones of those. Today, we are going to learn the in and out of WooCommerce Shipping Classes and how we can use those classes to create flexible shipping methods for our store.

What are WooCommerce shipping classes?

In short, WooCommerce shipping classes are a way to group similar products to have one shipping method and fee. For example, you have a store selling furniture. While decoration items like vases, lamps don’t cost much space when packing, tables and chairs do. So, you may want to group vases, lamps in one shipping class called small items and tables and chairs in another class, called large items.

You can then setup different shipping calculation for each class. For example, you want to set the shipping cost for small items to a flat rate at $2 and shipping cost for large items to a flat rate at $20. You can achieve this quite easily with WooCommerce shipping classes.

How to create shipping classes in WooCommerce

Creating shipping classes is very simple in WooCommerce. All you need to do is to go to WooCommerce->Settings->Shipping->Shipping classes:

go to shipping class screen

As you can see, we don’t have any shipping classes yet. Let’s click on Add shipping class button and add two shipping classes: small items and big items:

adding woocommerce shipping classes

Finally, click on Save shipping classes to save. You have successfully created two shipping classes.

How to use WooCommerce shipping classes

To use the shipping classes, first you need to assign them to the appropriate products. We are going to assign the small items class to a vase and big items class to a table. Let’s go to Products->All products and click on the Edit link under the product we want to assign the shipping class to:

edit woocommerce product

Let’s scroll down to Product data section, click on shipping and click on the shipping class select box:

assigning shipping class for product in woocommerce

Then choose the appropriate shipping class for the item. As we are editing the table, let’s select big items. Now, update the product.

You have successfully assigned a shipping class to a product. Make sure you do the same with the vase.

Our products now have shipping classes. However, there isn’t any change in shipping fee applied. That’s because shipping classes are part of shipping methods under a specific shipping zone. Let’s go configure the rules for our shipping classes.

Configure conditions for shipping classes

Let’s navigate to WooCommerce->Settings->Shipping->Shipping zones

all shipping zones in woocommerce

Shipping classes can only be configured as a part of shipping method, and shipping methods are children of shipping zones. So, if you have multiple shipping zones, you need to configure shipping classes’ rules for each zone. For example, you can set the shipping fee for big items to $30 for customers who have UK address and $60 for customers who have Australia address.

Sounds confusing? Let’s have an example to clear the muddle. Let’s say we are going to set the shipping fee of big items in Australia to $60.

First, click on the edit link under Australia shipping zone:

edit shipping zone

Then, click on add shipping method:

add flat rate shipping method

Select flat rate and click on add shipping method. Then click on the Edit link under the flat rate shipping method we have just added:


configure shipping method with shipping classes

There are three fields you need to pay attention to:

  1. The cost field: This is the base cost of the shipping method. The shipping cost for the item will be the sub of this field and its shipping class cost.
  2. “big items” shipping class cost: This is the cost of products which has big items shipping class (under a specific shipping zone and shipping method)
  3. “small items” shipping class cost: This is the cost of products which has small items shipping class
  4. No shipping class cost: You can set the shipping fee for items that don’t have any shipping class. We are going to leave this field blank. That means such items will have the shipping cost equal to the base cost ($10).
  5. Calculation type: You can have two options: per class and per order. If you choose per class, the shipping cost will be the total cost of all shipping classes of the items in cart. Thus, if we have one big item and one small item, the shipping cost will be: the base cost + big items shipping class cost + small items shipping class cost. However, if you choose per order, the shipping cost will be: the base cost + big items shipping class cost (since big items shipping class is the most expensive).

We are going to set the base cost is $10,  $60 and $5 for big items and small items accordingly. For calculation type, let’s select per class. Then, click on save changes.

Make a test order to see shipping classes in action

We are going to order one vase and one table. Then, go to the cart page:

sample order to test shipping classes

Now, look at the cart total:

shipping fee calculated with shipping classes

You can see the shipping cost is $75. That’s be cause we have $10 as the base shipping cost, $60 for the “big items” class (the table/desk) and $5 for “small items” (the vase).

$10 + $60 + $5 = $75

As mentioned above, there are two ways to calculate the shipping class cost in one order: per class or per order. We have $75 here because we select per class. If we now change to per order, you will see the shipping cost changes too:

cart total changed after shipping calculation type changed

As you can see now, the shipping cost is now $70. That’s because it’s equal to the base cost + most expensive shipping class, which is “big items” ($60).

Flexible shipping with shipping classes

Using shipping classes can offer much for flexibility that just setting a fix number. Let’s consider some scenarios to see how shipping classes can help you provide flexible shipping options for your customers.

Set shipping cost per product

For example, you don’t want to charge a fix amount per item in cart. Instead, for “small items” shipping class, you want to charge $0.5 per item. Thus, if one customer orders 10 items, his total shipping cost will be $0.5 * 10 = $5.

Let’s set that up by going to WooCommerce->settings->Shipping zones and edit a shipping method:

configure shipping method with shipping classes

This is the settings we have done previously. Now, in the small items shipping class cost box, enter [qty] * 0.5.

Then, go to our cart and update the cart to have 10 vase and remove the desk.

update cart to see flexible shipping class in action

Now, if you look at cart total, you’ll see our shipping cost is now $15:

new shipping cost based on item quantity

That’s because the shipping cost = $10 (base cost) + 10 * 0.5  = $15.

It’s really flexible, isn’t it?

Set shipping cost as a percentage of item total cost

You can also set the shipping cost as a percentage of item total cost. For example, the shipping cost for “small items” shipping class is 5% of the cost of all “small items” in cart. You can set that up by doing so:

setting shipping fee as percentage of items total

Now, if you go to our cart (still have 10 vases), you’ll see the shipping cost is now $25:

shipping cost based on percentage

That’s because 10 vases cost $300 ($30 per vase). 5% of $300 is $15. The total shipping cost would be: $10 (base cost) + $15 = $25.

Set the minimum and maximum amount for the shipping fee

After setting the fee as a percentage of items total, you can set the minimum and maximum cost for that shipping class. For example, I want to set the minimum shipping cost for “small items” is $20 and maximum $50. You can do it like so:

setting min and max shipping fee for shipping classes

Now, with still 10 vases in our cart, if we refresh the cart, you will see the shipping fee is now $30, instead of $25. That’s because the minimum fee is $20 plus base cost ($10) = $30.

apply min shipping fee for shipping classes

If you update the cart to buy 100 items (that is $3000 total and 5% * $3000 = $150), the shipping cost would be $60:

apply max shipping fee for shipping classes


That’s because our percentage based fee now is $150, exceeds the $50 maximum fee. Thus, the customers will get the maximum shipping fee $50 + $10 (base cost) = $60.


As you can see, WooCommerce shipping classes can be very powerful when setting up your shipping cost. You can set a fix amount per class. You can also set the shipping cost as a percentage of items total. Hopefully, the post has been helpful to you.

Does this post solve your shipping questions? If not, leave a message. In the mean time, make sure you checkout table rate shipping tutorial. I wrote an extensive tutorial there for people who need complex shipping structure.

How To Setup Woocommerce Minimum Order For Free Shipping

Free shipping is a great method to reward loyal customer. Good news is WooCommerce has some nice settings that help you enable free shipping for order that exceed a certain amount. Let’s learn how to setup WooCommerce minimum order for free shipping in this post.

Steps to setup minimum order for free shipping

Here are what we are going to do:

  1. Setup shipping zones
  2. Add free shipping method and set the minimum amount that triggers free shipping

Setup shipping zones

As you may already know, no shipping method exists outside of a shipping zone. So, your first step is to setup a shipping zone. Simply put, shipping zone is the physical range that your shipping methods cover. For example, you want to apply different shipping method, shipping fee for the US and the UK then you will need to setup a shipping zone that covers the US and the other for the UK.

Setting up shipping zones is super easy. If you need instructions setting up shipping zones, click here.

Let’s go to WooCommerce->Settings->Shipping and click on shipping zones:

all shipping zones in woocommerce

As you can see that I have setup four shipping zones.

Add free shipping method for a zone and setup the minimum amount that triggers free shipping

Now, for example, we are going to reward customers in Australia. For all order above $400, they will not have to pay for shipping fee. Let’s click on the Edit link under Australia shipping zone:

edit shipping zone

Now, you see the shipping zone screen like this:

add shipping method

Let’s click on Add shipping method, select free shipping:

add free shipping method for zone

Click on add shipping method, you will be see the shipping zone screen:

free shipping method added

Let’s click on the edit link under Free shipping method we have just added:

free shipping method settings

Here, you can put anything you like in the title. Note that your customers will see the title so make sure you don’t put anything that isn’t suitable to your customer here. In the free shipping requires… field, select “A minimum order amount”. Finally, enter 400 (or whatever number you want) in the Minimum order amount. This number is the cart total (i.e. money, not number of items).

Click on save changes and you are done.

Test free shipping on orders that meet the minimum amount

Now, let’s go to our store and buy one item. In this case, I’m going to buy a pair of shoes. Let’s go to the cart page:

free shipping inactive when the cart total is less than minimum required

As you can see, we don’t see the free shipping option since the cart total is only $54. Now, let’s update the cart to order 3 more. We will have 10 items in cart and the amount exceed $400. After updating the cart, you should see the free shipping option appears:

free shipping option available when minimum amount met

Our customers now can select that option to save the shipping cost.


As you can see, it is easy to setup free shipping for orders that meet a certain minimum amount. This is a great feature to boost customers loyalty. Shipping is a big topic in WooCommerce and there are many customizations can be done. If you need a specific shipping settings, please let me know in the comment section below. I’m always glad to help.

[Solved] Woocommerce Shipping Zones Not Showing In Cart and Checkout Page

Normally, when you setup multiple shipping zones for your store, in cart and checkout page, you should see the option to select:

change address to australia

However, for some reasons, you don’t see that option. All you see is something like this:

You wonder, why the shipping zones option doesn’t show up? Well, the fix is quite simple. Let’s go to WooCommerce->Settings->General and scroll down to General Option:

As you can see, my settings prevent me from selling to any countries other than Afghanistan. So, if you have shipping zones that cover Europe, make sure the selling locations include Europe and shipping locations option is enabled, like this:

woocommerce settings to enable shipping

Make sure you click on save changes at the bottom of the screen.

Now, if you go to the cart page, you can see the option to change the address and select shipping zone:

That’s it! If you have the problem fixed, that’s great! If you still need assistance, please let me know via the comment section below or via my contact page. Make sure you check the following resources out to have more control over your shipping:

How To Set Woocommerce Shipping Rates By Country

The goal

With the introduction of shipping zones, creating shipping rates by country is super easy. We are going to learn how to create flat rates shipping for two different countries in this post.

The setup

For this example, we are going to create flat shipping rate for Vietnam and Germany. The store is located in Vietnam so the flat rate for this country is $5. Shipping to Germany will be higher, $15 in our case.

The implementation

Let’s go to WooCommerce->Settings->Shipping and click on Add shipping zone.

Add a shipping zone for a country

Let’s go ahead and enter zone name and zone regions. In the image above, we created a shipping zone for Germany. Now, let’s go ahead and click on Add shipping method for this zone. We are going to create one flat rate shipping method for each zone.

Click on add shipping method, you will get a shipping method like below. Click on the edit button to enter its details:

flat rate shipping for country

Click on Save changes and you are done for Germany. Let’s do the same for Vietnam. You’ll get something like this after creating flat shipping for these two countries.

flat rate shipping for two countries Vietnam and Germany

Now you are done. Let’s place test order and see how the shipping based on country works.

Place a test order

Now we have a test order. Let’s go to the cart page, you will see the appropriate shipping rate applied:

shipping rate by country applied

As you can see, the shipping fee is $5, which is exactly what we set when we created the shipping method for Vietnam.

Wait! It doesn’t work for me

If you find the method above doesn’t work for your store, chances are some other plugins or custom code has modified one of the shipping hooks. (`woocommerce_package_rates` for example). In such case, you may need to find the plugin that does that and deactivate it for this method to work.


As you can see, you can easily set flat shipping for each country. You are not limited to shipping based on countries though. If you want a simpler shipping structure, you can set a flat rate for regions like Asia/Africa… However, doing so reduce the level of control over your shipping rates. The choice is yours.