How to Use WooCommerce Table Rate Shipping


One of the most complex parts about writing e-commerce software is creating shipping options that are configurable enough that people can create the shipping costs they want but the functionality isn't too complex that people are confused. That's why with WooCommerce we include Flat Rate Shipping because it's perfect for people just getting started and isn't so complex that you can't launch your store.

If people want even more shipping options after having set up the rest of WooCommerce then it may be time to look at Table Rate Shipping. It is by far one of the most configurable extensions and it allows you create a table of shipping rates in hundreds of different combinations. You can create zones to target your shipping costs for a particular geographic region, you can group products by similar shipping sizes, you can use the product weight to determine costs, and you can create a table of rates where depending on where the order appears in the table determines the rate. Let's jump in.


One of the first things you'll notice about Table Rate Shipping is that you can create zones. Zones can contain zip codes, states, or countries. Each zone can have different shipping costs so you'll want to create a zone for each region that should have different costs. So if you offer in town delivery for $10, delivery in state for $20, delivery in the US for $30, and delivery anywhere in the world for $40 you'll want to create four different zones.

Multiple Shipping Methods

One of the cool things about Table Rate Shipping is that you can create any number of shipping methods per zone. If you're a flower delivery shop you may to have a “pickup in store” method which costs nothing, an “end of day delivery” which costs $10, and an “express delivery” which costs $30 but will deliver in the next hour. The beauty of the extension is that you can add as many shipping methods to your zones and each zone can have different methods.

Table Rate Shipping

Once you figure out the above you can create your table of rates. You can create any number of conditions and the first one that is matched will display on the front end. You could for example create a table that says for 1-10 items charge $10, for 11-20 items charge $20, and for 21-999 items charge $30. This is pretty basic functionality but once you combine it with shipping classes, shipping by weight, and how you calculate the charges it becomes pretty powerful.

Shipping Classes

Shipping classes allow you to group similar types of items to make your table of rates a bit easier. You could for example create a large shipping class for all of your potted trees and create a flower class for your flowers and then charge $5 per flower and $100 per tree quite easily. You could also create a class of tiny for any accessories like a lawn gnome which you could easily ship with a tree and you don't need to charge the end user.

Shipping Costs by Weight

Something you can't do with flat rate shipping is ship by weight. When you're shipping very large items like potted trees or very dense material like lawn fertilizer or granular products like sand it can be incredibly useful to ship by weight.

Calculations However You Like

Flat Rate Shipping will lump the number of items together for calculations. This works pretty well for some situations but you may want to break it apart to have more granular costs. You may want to have a cost for the total weight of the flowers and add that to the cost for the total weight of the potted trees. You can do this by basing the cost on the order, per item, per line item, or per shipping class.

Table Rate Shipping is a complex little plugin but we make it that way so that you have ultimate control over your shipping options. Hopefully the video helped. If you need more help setting things up I recommend reading the official Table Rate Shipping documentation.

Happy (table rate) shipping!

23 thoughts on “How to Use WooCommerce Table Rate Shipping

  1. […] Patrick Rauland wrote about how to use table rate shipping. […]

    • I am really struggling to make this work correctly. I have some products that need to be shipped based on weight and some that need to be flat rate. It’s like I can either do one or the other…

  2. Hi Patrick,
    I am sure that this table rate shipping add-on is a wonderful thing but many of small part-time merchants don’t really need all these options.
    For example, I ship my product via USPS flat rate boxes to US locations and I only use 3 options: small, medium and large. $200 for this? Not worth it.
    For now I went with free shipping and just added shipping cost to the prices.

  3. Hi Patrick. Thanks for the post. I do love Table Rate Shipping, however, it seems really daft to me that you can’t get it to default to a specific rate in the shopping cart.

    For instance, I have 1 zone (UK) and 3 rates – week-day delivery, Saturday delivery and collection. Obviously collection is free. I would really like week-day delivery to be selected by default at the cart, but instead Collection is.

    Another problem is that I have two methods of payment, PayPal and Cash on Collection. I really need cash only to be available on the collection shipping rate. It seems that WooCommerce can only do this on their standard shipping methods, not those created with table rate shipping.

    • Hi Jill,

      The default method for Table Rate Shipping is the first method in the backend. Move your week-day delivery method to the top of the list and it should be first.

      As for Cash on Delivery. Right now you can only set it to specific shipping methods which means all Table Rate Shipping methods or none. I’d suggest it on the ideas board so the developers take notice.

      It wouldn’t be a massive customization so if you needed it today then I would reach out to Codeable to customize this for you.

      • Thanks for your reply. Unfortunately it is not the case that the first method is selected as default. I have week-day delivery as the first method and collection is the last, however collection is always selected in the cart as the default.

        • Hey Jill I tested this myself a few hours ago and it worked on my site. I would send in a ticket to WooThemes support.

          • Thanks Patrick!

          • Patrick, your comments about the default method for TRS is out-of-date.

            It WAS true that you could set the default method of shipping by which method was listed first in Table Rate Shipping.

            However, it is not true any more.

            The method listed first in the TRS tables will be listed first in the Cart, but the pre-selected (default) method will now be the cheapest method.

            It appears that WooCommerce is now over-riding the order of listings in TRS.

            It would be nice if you were to update your posted TRS info.

    • Today I found perfect solution – you have to use two woocommerce plugins – “Table rate shipping” and “Conditional Shipping and Payments”. You can set “COD” on “Table rate” in general, but exclude it on specific shipping methods, using “Conditional Shipping and Payments”. There are more valuable options between these two plugins, for example, you can set minimum amount of money on customer cart, to provide free shipping. But you can not do it directly. There are no option like this. You must think out of the box to set it. But it is possible, if you are creative. 🙂

  4. Hi Patrick, thanks for the great guide!
    However, I have some question with the plugins, is it possible to have this rules:
    If: Total order amount $0-99:
    0-0.49kg = $5
    0.5-1kg = $8
    1kg-2kg = $10

    If total order amount is more than $100:
    0-0.49kg = FREE
    0.5-1kg = FREE
    1kg-2kg = $5
    2kg-3kg = $8


    • Yes you can combine rules like this. 🙂

      For technical questions like this it’s best to reach out to official WooThemes support.

    • “If total order amount is more than $100” – I think you can not set condition like this. You can set “product price” as condition, not order amount. But you can use this plugin + “Conditional Shipping and Payments”. Then you can create in one zone two identical shipping methods, where in the first you set shipping costs, if order amount is under 100$, and in the second shipping method you set shipping costs, if order amount is more than 100$. Then you can use “Conditional Shipping and Payments” and add extra condition, for example – you disable first shipping method, if total cart amount is less than 100$, and disable second shipping method, if total cart amount is more than 100$. I hope you get my idea. 🙂

  5. Hi Patrick, I’ve received an error for using the table rate shipping, even though I’ve enabled everything in the plugin. (Zone, Method, Rate)

    There are no shipping methods available. Please double check your address, or contact us if you need any help.

  6. Hi Patrick,

    Does the table rate shipping plugin has a round-off functionality?
    Say if the weight is 1.7 kg so instead of calculating shipping charges for 1.7 Kg, can it round off to 2 Kg and calculate shipping charges of 2Kgs?

    • Hey Ankit – you could create different requirements for shipping. Ex. Packages weighing 1.5-2.4 cost $4 and packages that weight 2.5-3.4 cost $5. Etc. Would be a bit tedious but that’s one way you could do it.

  7. I realize this article is a bit old, but I just wanted to write and say thank you! The video was extremely helpful in teaching me the basics of how this plugin works.

  8. Hello. I am using Table Rate Shipping. I have set it to only except certain postcodes as the shipping address. Do you know how I allow the Billing address to be outside the desired postcode area? So if they’re shipping to the required zone, but their billing address is outside the required zone, their order will be accepted? Many thanks, Chris.

  9. Hello Patrick,

    I need some help please

    I have for example Spain. .. and I have different cost shipping in Spain

    For example we have the Canarian islands that is Spain but the cost is not EU… How to define this please? Or for example Cyprus North and South we have different cost shipping from DHL. ..

    How can we define different cost for country’s that they belong in 2 Zones the same time… ?

    Thank You

  10. Thanks for the great video. I read Woothemes documentation but it seemed to explain it in a strange way focussing more on product shipping classes rather than by zone. Your video cleared it all up for me!

    Thanks again,

  11. Hi,

    I want to disble the shipping after a weight greater than 10kg. How can i do that by this plugin. I have different rates for different weights. But I need no shipping available after weight greater than 10kg. Can you please help me with this.


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.