The WooCommerce Core features for shipping has become quite more extensive with WooCommerce 2.6 a while back. One of the things that is not possible to configure in WooCommerce Core is weight based shipping. To accomplish that you’ll need to use a shipping plugin that supports that.

In this post I’ll be explaining how you can setup weight based shipping using the Advanced Shipping for WooCommerce plugin, a plugin that I’ve developed. I’ll show you different ways of configuring shipping methods based on weight and also how you can setup table rate weight shipping.

Creating a Weight Based Shipping Method

Lets set a requirement that we’d want to configure first. Lets say we want to have the following weight rates to be setup:

  1. From 0lbs to 7lbs, the cost will be $3.95
  2. From 7lbs to 8lbs, the cost will be $4.50
  3. From 8lbs to 9lbs, the cost will be $4.95
  4. From 9lbs to 10lbs, the cost will be $5.75
  5. Anything above 10lbs, the cost will be $7

This is a pretty simple and straight forward configuration. It can best be setup using the ‘Weight’ condition to create weight ranges.

Step 1: Create a Advanced Shipping Rate

Step 2: Use two ‘Weight’ conditions to create a weight range

Step 3: Set the shipping cost

Step 4: Save and Repeat for the other ranges

You can repeat these steps to configure the 4 weight based shipping rates. They should all look the same, only the numbers change.

Only the last shipping rate looks a bit different, as that one doesn’t require a ‘less or equal’ Weight based condition to limit the weight range.

Setting up Country Weight Based Shipping

The greatest power of the Advanced Shipping plugin lies with the conditional logic. This will allow you to add any number of conditions to a condition group, including a ‘Country’ condition to set the weight based shipping method to only be applied to a specific country.

This can of course be replicated for the other shipping rates too, and for other countries too.

Creating Table Rate – Weight Based Shipping Cost

When your requirements are bit more complex / extensive from the earlier scenario where there are 5 simple rules, using a extension for the Advanced Shipping plugin would be recommended. The WAS Advanced Pricing extension (free extension, only requires a supported purchase key) allows you to configure more advanced shipping costs, including a easy table rate way of setting up cost per weight.

When we take the former shipping scenario with the 5 simple rules, we’d now be able to enter those in the ‘Cost per weight’ section in a single shipping rate. We’d no longer need to create individual shipping rates and use the ‘Weight’ condition to setup the weight ranges.

Configuring Weight Based Shipping Cost per Category or Shipping Class

You can do a lot of cool things with the Advanced Shipping – Advanced Pricing extension. This includes configuring weight based shipping rates per category, shipping class and even if you’d like per product.

Here’s what a empty ‘Cost per category’ section looks like.

— Why am I showing you this? Notice that the ‘Min’ and ‘Max’ fields are based on the ‘Quantity’ of the category/shipping class by default, not the weight as the ‘Cost per weight’ section showed. So how do you setup the weight based shipping cost based on the category / shipping class?

Inside the ‘Min’ and ‘Max’ fields you can add a ‘modifier’ character, in this case a ‘w’ (standing for ‘weight’) to modify the Min/Max field to look at the category weight instead of quantity. The same can be done in the ‘Cost per shipping class’ and ‘Cost per product’ sections to setup weight based shipping cost for the selected (group of) products.

Multiplying Shipping Cost With Weight

There are more cool features to show in the WAS – Advanced Pricing extension. The ‘Fee amount’ field has the ability to setup a flat, percentage (cart/group), deducting (negative) shipping cost. There’s also the option to multiply it with the group quantity, meaning for the ‘Cost per weight’ section this means multiplying it with the total cart weight.

Multiplying a amount with the weight can be done using a asterisk ‘*’ symbol in the ‘Fee amount’ field. This example will add shipping cost of $5 * {weight} to the shipping rate.

Shipping Cost per Weight Interval

The last feature I want to show is the ability to setup shipping cost per weight interval. Think setting a shipping cost of $4 for every 10lbs. It is of course possible to setup weight ranges manually with a finite number, but why do it manually if it can be automated and infinite.

There are two ways to setup the interval based shipping cost. Depending on your needs you can enter the value 4/10 to round it up, or enter 4\10 to round it down to the nearest 10lbs.

Lets give some examples for clarification.

This will add $4 for every 10lbs, rounded up. So if there’s a total between 0 and 10lbs in the cart it will add $4. Between the next 10.01 and 20lbs it will add another $4, and so on and so forth for each 10lbs.

The opposite (kinda) happens with this setup;

This will not apply any cost below the total of 10lbs, between 10lbs and 20lbs it will add the first $4 to the shipping cost and the next $4 between 20lbs and 30lbs, and so on and so forth for each 10lbs.


Thats it for this post, if you have any questions or think I’ve missed something, feel free to ask/share in the comments!


Oh, and here’s an easy link to the Advanced Shipping for WooCommerce plugin

Jeroen Sormani

I'm a professional WordPress plugin developer on a mission to create the best plugins for my clients. I'm specialised in developing general WordPress, WooCommerce and Easy Digital Downloads plugins.

Interested in talking about a WordPress project? Get in touch!

Follow me on Twitter

4 thoughts on “How to Setup Weight Based Shipping in WooCommerce

Tom October 22, 2019 at 4:10 pm

Can you set the table up in ounces?

Jeroen Sormani December 6, 2019 at 1:29 pm

It is based on the store weight unit, so if this is ounces it is possible.

Fernando December 5, 2019 at 10:26 pm

Hi, how I can get shipping price in weight base, like until 30 kg flat fee 20€, above 30.01 is the same 20€ + 0.5€ per kg(extra kilo) ?

Jeroen Sormani December 6, 2019 at 1:30 pm

Feel free to reach out through the support form to get direct support on the plugin;

Leave a Reply