The Table Rate Shipping extension for WooCommerce is a very powerful method for calculating shipping. It allows you to set a shipping price based on a condition, such as the total value of items in the cart, the # of items in the cart or weight of the cart for a destination country or group of countries.
With every tutorial in this series we are using the latest version of WooCommerce version 1.5.6. The theme is Shelflife version 1.0.22, a beautiful responsive theme by WooCommerce. These are all installed and activated in WordPress, version 3.3.2.

Table Rate Shipping Video

Used to it’s fullest capacity, this is a solution for calculating shipping very accurately. If that is what you need, then purchase the Table Rate Shipping extension from WooThemes. Once you install and activate the extension, go to the WooCommerce settings and select the shipping tab, then the table rates option to see the configuration screen.
After enabling the plugin, you can set the Method Title that gets displayed to the customer at checkout. But you can enter more specific labels on a per table basis instead. The last thing you do before adding tables is set the tax status for shipping and enter the handling fee that is applied before any tables are used.

Configuring Table Rates

There won’t be any tables set the first time you use the extension, the image below is the configuration screen after adding some tables for the purposes of this tutorial.

We set 3 tables per shipping destination and each table uses the weight condition. To properly set the range values for the weight condition you need to consult the Weight Unit selected in WooCommerce Settings > Catalog. Ours is set to grams, so to define a range between 0 and 1 kilogram we need to input 0 to 1000. You have to set weights on all your products if you would also like to use table rates in this way.
Note that from one table to the next the range picks up where the previous one ended in increments of a 1000 grams, but if your shipping company charges per 100 grams, then you should input your ranges as such. Each table has a cost relative to the range and the labels, what the customer sees at checkout, conform to the shipping destination for a group of tables.
We duplicated the first 3 tables that calculate shipping within South Africa, because the conditions and weight ranges would remain the same for other destinations, then we just changed the destination countries/states, costs and labels.
Further down the screen, in the Shipping Class Priorities section, a list of your existing shipping classes is displayed. We circled the configure buttons, and will explain how to use them further down in this tutorial. If you need a short intro to shipping classes, please read our post on WooCommerce Flat Rates.

Above is a cart with two products that together weigh 2500 grams. The purchase is by a South African customer. Shipping is being displayed after the table rate method checks the destination, the condition, the range of that condition and calls the label for display. That’s a win, we did input a cost of R300 for South Africans in the range of 2000 to 3000 grams.
Above is the same cart with two products that together weigh 2500 grams, but this time by an American customer. Winning again, we did input a cost of R600 for Americans in the range of 2000 to 3000 grams and note that a different label is being displayed.

Configuring Table Rates with shipping classes

Let’s say that you have a few products that due to their dimensions or bulk need special arrangements for shipping. Due to this, they are more expensive to ship. You can create a shipping class and setup an entirely separate group of tables for products that form part of that shipping class.
Once you have created a shipping class, they will be listed in the main configuration screen for table rates with a configure button. Clicking this will open the edit screen for a shipping class where you can compile your table in a manner exactly the same as the main table rates screen.
The following image gives you a taste of what it looks like and how to configure it.

We did ours with the same tables used for South Africa as a destination in the standard table rates screen, but the costs are a bit more and the labels have also been changed.
When we add a product that has the depicted class into a cart, these class specific tables are used. Hence, since the product weighs 1800 grams, the cost is displayed at R275.

And this is what happens when we update the order as if it were from America.

No shipping methods were found because the product in the cart has a class where we did not configure tables for the United States. If we had set these up like we did for the standard table rates, shipping would be calculated with no issue.

Cart contents with mixed classes

An upcoming release of the table rates extension will calculate costs on items that have different shipping classes and add them all up to display one shipping cost at checkout. At present the extension can’t do that, instead requiring you to prioritise your shipping classes, which means that the product with the highest priority shipping class becomes responsible for calculating shipping on the entire order. This will not be ideal for some, but here is the procedure for doing this anyway.
In the main table rate configuration screen, there is an area called Shipping Class Priorities, mentioned before in this tutorial. It allows you to enter numeric values. The number 1 is the highest priority, so based on the image below, if a cart contained many products, but one product has no shipping class, then the  default or standard table rates would be applied to the entire order. If all products in the cart has shipping classes and one product had the class, Shipping Group 1, then the entire cart would calculate shipping using the table configured for Shipping Group 1.

In Review

This is a brilliantly devised plugin. It would take a very skilled and expensive developer to hard code this or something similar into your website. Fortunately we are on WordPress and plugins like these that allow YOU to implement the solution exist, and in that it is genius.
The only possible drawback isn’t actually a drawback. It can be time consuming to configure, but if you consider how long it would take to get a similar solution custom coded, a few days configuration time is nothing to complain about.

We recently audited configuration time for a company using the South African Postal Service, to everywhere, from zero grams to thirty kilograms. This would require about 2000 tables. It would be great if WooLabs released a CSV import/export tool for table rates, so that tables can be imported from an existing spreadsheet document, or exported for use elsewhere.

Simply put, if you need the shipping costs to destinations worldwide calculated dynamically, whilst taking stock of the cart characteristics, then this plugin is a must. There are other solutions, like a shipping gateway, but most corporate shipping companies for which gateways exist are too expensive. Plus, your company may have its own shipping logistics, but not the resources to get a gateway developed, the Table Rate Extension for WooCommerce has everything you need to set it up yourself. It can be a bit tricky for a beginner and time consuming, but we really hope that this tutorial helps to demystify it. Once you get the hang of it, it really isn’t hard.

Shipping in SA with WooCommerce | Series index

You can read the rest of this series by clicking the links below.