1. Documentation /
  2. Table Rate Shipping

Table Rate Shipping

Table Rate Shipping makes it possible for you to create complex rules for shipping your products worldwide.

You can define multiple rates based on the product’s destination, have multiple rates per zone, and add rules based on product weight, the number of items, shipping class, and price.

Every store is unique, with its own products and shipping needs, so every setup is different. This page introduces you to the concepts behind Table Rate Shipping, guides you through setup, and provides real-life examples that demonstrate its concepts in action.


↑ Back to top
  1. Purchase the product from WooCommerce.com
  2. Download the ZIP file from your WooCommerce.com dashboard
  3. Go to Plugins > Add New > Upload and select the ZIP file you just downloaded
  4. Click Install Now and then Activate.
  5. Read on to learn how to set up and configure the product.

More information at: Install and Activate Plugins/Extensions.

How it works

↑ Back to top

When a customer checks out items in their cart, the plugin looks at the destination of items and then uses the table of rates you created to calculate total shipping. Each destination can have its own rules, or multiple sets of rules, based on your shipping requirements.

To calculate shipping correctly, you need to create shipping zones and shipping rules. The plugin will take care of all the calculations for you from that point.

Setting up Table Rate Shipping requires some thought and planning on your part. Before getting started with the plugin, you need to do the following:

  1. Set up your shipping classes if you need different rules for different classes of products.
  2. Determine and set up your shipping zones.
  3. Get shipping rates from your chosen courier so you know how you want to charge.

Setup and Configuration

↑ Back to top

Shipping Classes

↑ Back to top

Shipping classes are used to indicate products that are similar for shipping. For example, you may have a shipping class called “small” to apply to bookmarks and “medium” for books. You may also wish to apply the “small” class to pencils and pens, as all are similar in size and weight, and can have the same shipping rules applied.

You can create tables of rates that apply to different shipping classes. This gives you considerable flexibility when creating shipping methods.

Product Shipping Classes guides you in setting up shipping classes.

Shipping Zones

↑ Back to top
This shipping method has to be added to a Shipping zone. If you haven’t configured your Shipping zones yet, please check our Setting up Shipping Zones guide before proceeding.
  1. Go to WooCommerce > Settings > Shipping > Shipping zones.

2. Click the Edit button on the shipping zone where you want to offer this method.

3. Inside the shipping zone, click the Add shipping method button.

4. Then, select the shipping method and click the Continue button.

  • Click the Edit button on the right side of the Shipping methods table to configure the settings:
    • Method Title Name of shipping method displayed to customers. For example, 1st Class and 2nd Class, if there are two methods for a zone.
    • Tax Status — Define whether or not tax is applied to the shipping amount.
    • Tax included in shipping costs — Define whether the shipping costs defined in the table are inclusive or exclusive of taxes.
    • Handling Fee — Additional fee. Can be a fixed amount (2.50) or leave blank for no handling fee.
    • Maximum Shipping Cost — Can assign a maximum cost to a method. For example, if the total calculated is greater than the maximum cost, the price is decreased to maximum cost amount.

Rate Settings

↑ Back to top
Table Rate Shipping - Rate Settings

Calculation Type — Tells plugin how to calculate shipping on customer’s cart. Choices are:

  • Per order – calculates shipping for the entire cart. If there are varying shipping classes in the customer’s cart, the class with the highest priority will be used (where 1 is the highest priority). These can be set in the table that appears underneath the rate table when per order is selected.
  • Calculated rates per item – calculates the rate by checking each item in the customer’s basket against the table of rates.
  • Calculated rates per line – looks at each line in the basket and checks that against the table. Multiple of the same item are on the same line, so the customer will only be charged once for multiples of the same item.
  • Calculated rates per shipping class – each shipping class in your basket is totaled and offered at a final rate.


A customer has the following items in their cart:

Number of itemItemShipping class
2red t-shirtsmall
1green t-shirtsmall
1black jumpermedium

The following costs are set for medium and small shipping classes.

Cost for shipping classCostPriority

Total for each calculation type is:

Per orderPer itemPer linePer class
  • Enter Handling fees per order/item/line/class.
    Add a flat additional fee to the cost of each calculated item (this could be an individual item, line or shipping class based on the above settings).
  • Enter Minimum cost per order/item/line/class.
    Set the minimum cost per calculated item (this could be an individual item, line or shipping class based on the above settings).
  • Enter Maximum cost per order/item/line/class.
    Set the maximum cost per calculated item (this could be an individual item, line or shipping class based on the above settings).
  • Discounts in Min-Max.
    Enable this option if you want to use discounted prices in the Min-Max Price Conditions for Table Rates. When unchecked, the original, pre-discount prices will be used for comparison.
  • Taxes in Min-Max.
    Enable this option if you want to use prices inclusive of tax when assessing the Min-Max Price Conditions for Table Rates. When unchecked, the calculations will be based on pre-tax prices.
  • Enter Rates.

Adding Rates to a Table Rates

↑ Back to top
Adding Rates
Adding Rates

Once you’ve chosen how to calculate rates, it’s time to start adding rates. The plugin will compare items in the customer’s cart against the table of rates to calculate shipping costs.

Shipping Class

Choose the shipping class to which this rate will apply. You can also choose to apply the rate to items in any shipping class or in no shipping class.


This column tells the plugin what product information it should use to calculate rates. Your options are:

  • None – you don’t wish to use product information to calculate the total
  • Price – the price of the items
  • Weight – the weight of the items
  • Item Count – the number of an individual item
  • Item Count (same class) – the number of items in the shipping class

Remember that the calculation is determined by the Calculation Type dropdown.


The minimum and maximum amounts for your chosen condition. These will be:

  • Price – the minimum and maximum price
  • Weight – the minimum and maximum weight. The weight unit used is determined in WooCommerce > Settings > Products
  • Item Count – the minimum and maximum number of an individual item. For example, you may wish to have one price for 1-50 items and another for 50+ items
  • Item Count (same class) – the minimum and maximum number of items in a specific class
If you are filling in minimum and maximum amounts for your item, ensure that you account for as many items as a person would conceivably order. For example, for item count, it’s good practice to have a row that has a maximum up to 999. This will ensure that shipping rates will always be calculated.


When you check this option, you’re telling the plugin: If you reach this row of the table, stop the calculation from going any further. Meaning, you’re telling the process to break.

This is used for:

  • Per order – to tell the plugin to offer a specific rate and no others
  • Calculated – to stop any further rates being matched, with priority given to the top of the list. This is particularly important when merging shipping (see below).


Enable this option to disable all rates or the shipping you are editing if the row you are editing matches any item/class being quoted.

Shipping Prices

This is where you set the cost for your shipping. You can add the following figures:

  • Row Cost – the base cost for shipping this item. This could include the cost of your packaging.
  • Item Cost – the cost for each individual item. This is in addition to the cost.
  • Cost per kg – the cost per kg for the items.
  • % Cost – the percentage of the items’ total that should used to calculate shipping.


If you are creating a per-order table of rates, you can add a label for each individual rate.

Class Priorities

↑ Back to top

If you have created shipping classes under WooCommerce > Settings > Shipping > Shipping Classes and if you have chosen “Per order” as Calculation Type, you will see a section called “Class Priorities”.

If there are items in different shipping classes in the cart, the Table Rate will be calculated based on those items in the shipping class with the highest priority (or the lowest number). In the example below, the Hoodies shipping class is more important than the default class.

Class priorities

Merging Shipping

↑ Back to top

There are times you may wish to merge shipping of a specific product. For example, imagine you have a bookmark and a book. The bookmark is in the small shipping class, and the book is in the medium shipping class. If a customer orders a book and a bookmark then you can simply bundle this shipping together. There’s no need to charge to customer for shipping the book and the bookmark separately.

If shipping for the bookmark is usually $2.50 and shipping for the book is $5, then you want to offer a shipping cost of $5, not $7.50.

To properly merge items for shipping, you need to ensure that the table is set up with the highest rate at the top and the lowest rate at the bottom.

What you need to do is to tell the plugin: Go down this table of rates and stop when you get to the first condition that matches.

To merge rates in a simple setup, you would:

  1. Choose Calculated rate (per shipping class) for your calculation type.
  2. Create rates on the table, with the highest rate at the top. In our example of books and bookmarks, the medium shipping class is above the small shipping class.
  3. Ensure that the Break option is checked.

Let’s take a look at the difference when the order and the break checkboxes are used.

In the first example, the table is set up correctly. Medium is above small on the table, and the break checkbox tells the plugin to stop its calculation when the first condition is met. The shipping price for the customer is $5. i.e., The bookmark is correctly bundled with the book.

Table Rate Merging Shipping Example 1

In the second example, medium is correctly above small, but the break checkbox hasn’t been checked. This means that the plugin continues to calculate through the table for all of the items, calculating separately for each item and offering a final price of $7.50.

Table Rate Merging Shipping Example 2

In this example, the break checkbox is checked, but small is above medium in the table. As the plugin calculates down through the table stopping at the first row in which its condition is met, it stops at small. The customer is offered the price of $2.50, which is the shipping cost for the bookmark, not the book.

Table Rate Merging Shipping Example 3

In the final example, small is above medium in the table and the break checkbox is not checked. This time, the plugin checks every item in the basket against the table without stopping. It offers the price of $7.50 for shipping, totaling the cost for each line item, rather than combining.

Table Rate Merging Shipping Example 4

All fine adjustments made to the table of rates will affect your final total. Below are working examples of calculations for an online t-shirt store. These should help demonstrate the practical application of the plugin.

Working examples

↑ Back to top

Sending multiples of similar items

↑ Back to top

Dave has a t-shirt shop. People often buy multiples of his t-shirts. His base rate of shipping is $2, and then each t-shirt adds $1 to shipping. To create his shipping rules, Dave does the following:

  1. Creates a shipping class, small, to apply to all of his t-shirts
  2. Creates a shipping zone, Zone 1
  3. Chooses the Calculated rate (per shipping class) calculation type
  4. Creates the following rules:
    • Shipping Class – small
    • Condition – item count (same class)
    • Min:1 Max:1000
    • Cost – 2
    • Item Cost – 1

His table is set up as follows:

Table Rate Shipping Example 1

When customers purchase his t-shirts, they are charged as follows:

  • 1 t-shirt: $3
  • 2 t-shirts: $4
  • 3 t-shirts: $5, etc

Applying multiple rules to the same shipping class

↑ Back to top

It’s all going well for Dave, but he realized that the basic shipping rate goes up when people buy more than 50 t-shirts. He needs to add another rate. The original rate is edited to a Minimum of 1 and a Maximum of 49. And he adds the following rule:

  1. Shipping Class – small
  2. Condition – item count (same class)
  3. Min:50 Max:1000
  4. Cost – 10
  5. Item Cost – 1

His table is set up as follows:

Table Rate Shipping Example 2

When customers purchase his t-shirts, they are charged as follows:

  • Purchasing 49 t-shirts costs $51 for shipping (49*1)+2
  • Purchasing 50 t-shirts costs $60 for shipping (50*1)+10

Merging shipping for different shipping classes

↑ Back to top

Dave’s been pretty successful with t-shirts, so he decides to get into selling jumpers. When a customer buys a jumper and a t-shirt, he knows that he can package the t-shirt and jumper together, so he doesn’t want to charge shipping for each separately. His base rate for shipping a jumper is £5, and each jumper costs £3 to ship. To create rules for shipping jumpers, he does the following:

  1. Creates a shipping class medium to apply to all of his jumpers
  2. Opens his Zone 1 shipping
  3. Creates the following rules:
    • Shipping Class – medium
    • Condition – item count (same class)
    • Min:1 Max:1000
    • Cost – 5
    • Item Cost – 3

His table is set up as follows:

Table Rate Shipping Example 3

As described in the section on Merging Shipping, the most expensive shipping class needs to be at the top of the table. This will ensure that the customer is only charged the rate for shipping the jumper.

Sending by weight

↑ Back to top

Dave decided to move to a new courier company. It’s more cost-efficient for him to ship by weight, so he needs to rethink his shipping rates. The new rates provided by the courier are:

  • 0-750g: $2.70
  • 751-1000g: $4.30
  • 1000g-2000g: $8.30

This time the calculation type is Per Order. This will calculate the total based on the weight of the entire order. He needs to create three rows, one for each rule he wishes to create. These will apply to any shipping class, with the weight condition, and a minimum and maximum weight applied.

If your courier quotes you a cost per kilo, you could set your condition to None, and use the Cost per KG option.

Offering Multiple Shipping Options

Dave wants to give his customers as much flexibility as possible, so he decides to offer customers in the shipping zone both 1st and 2nd class mail options. To do this, he does the following:

  • Calls his original rate 1st class
  • Navigates to the Shipping Zone, and clicks Add Shipping Method
  • Calls his new table 2nd Class
  • Creates a per order table with the 2nd class rates

Comparing prices after discounts

↑ Back to top

Customizations are not covered under our support policy, so this isn’t something we can help implement or troubleshoot on your site.

When a price range comparison is used in the table rates, it is based on the actual product price, which includes taxes, but excludes discounts / coupons. Using the filter below, it is possible to compare the prices based on line item total, i.e. with discount / coupons and taxes applied.

add_filter( 'woocommerce_table_rate_compare_price_limits_after_discounts', '__return_true' );
view raw gistfile1.txt hosted with ❤ by GitHub


↑ Back to top

How to indicate “Free Shipping”?

↑ Back to top

If some of the rates are set to 0, you’ll want to clarify that to customers by editing the Label column with a message such as “Free Shipping” which will display when viewing the cart, and at checkout.

Questions and Support

↑ Back to top

Something missing from this documentation? Do you still have questions and need assistance?

  • Have a question before you buy this extension? Please fill out this pre-sales form – please include the name of this extension in your query.
  • Already purchased and need some assistance? Get in touch with a Happiness Engineer via the WooCommerce.com Support page and choose this extension name from the “I need help with” dropdown