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

14 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;

Brian June 27, 2021 at 11:01 am

Thanks very much for your work.
I have a weird set of requirements, hope you can help.

I have a perishable product and several non perishable products.
I need to send the perishable one by EXPRESS/PRIORITY shipping, which is a more expensive shipping rate…
The non perishable items can go by STANDARD shipping (cheaper.)

I also need to have a weight based (or volume based it doesnt matter) shipping to calculate the actual shipping rate.

When the perishable and non perishable products are both in the order, I need to combine the weight (or volume, I can do either) and use the EXPRESS shipping (using combined express is cheaper than separating the order into 2 packages.)

Most plugins I see are designed to give the customer the choice between STANDARD and EXPRESS. I need the website to only use EXPRESS when the perishable product is in the order.

I do not mind paying for the plugin, if it will do the job I need.

(I currently use a free weight based shipping plugin, not your one.)

Many thanks for any help.

Jeroen Sormani June 28, 2021 at 10:14 am

Hi Brian,

It is possible to set this up with the Advanced Shipping plugin. With the conditions you can check which products (classes) are in the cart and setup a express to be available (solely) or standard as well.


Michelene July 7, 2021 at 10:10 pm

I have an on line store selling body products. When a customer orders supplies from my web site, I would like to add shipping based on the weight of all products instead of charging shipping for each item. This is how the developer set up my web page. So my customers are ordering items and being charge as if each item is being sent separately in stead of in one box. Please help me so they are being charged only one flat shipping fee instead of being charge shipping for each item.

Jeroen Sormani July 8, 2021 at 9:44 am

Hi Michelene,

The Advanced Shipping plugin is based on the total cart weight. If you’re having any difficulties, feel free to reach out through the support channel of the plugin.


Irene January 26, 2022 at 10:11 am

Hi Jeroen,
Does your plugin work if we have different weight rates per country? Say, one table of price per weight for national shipping, another one for EU shipping and a third set of prices for international shipping?

Jeroen Sormani January 26, 2022 at 10:35 am

Hi Irene,

Yes, this is possible to setup with the plugin 🙂


Irene February 10, 2022 at 5:09 pm

Thanks Jeroen. I cannot seem to find the tab “Shipping settings” from the Step 3: Set the shipping cost.

Jeroen Sormani February 11, 2022 at 8:43 am

Hi Irene,

Tf you have the Advanced Shipping plugin installed it should be available. If not and need assistance with the plugin, feel free to reach out through the support channel here:


Arek November 22, 2023 at 1:46 pm

Hi. Can you set up the maximum shipping cost?
Scenario1: Bought 2 product-1 weighting 0lbs to 7lbs = $7.9
Scenario2: Bought 1 product-1 and product-2 weighting 0lbs to 7lbs = $7.9

In both scenarios can the plugin make max shipping of $5 instead of $7.9

Thank you.

Jeroen Sormani November 29, 2023 at 6:04 pm

Hi Arek,

There’s no ‘Max cost’ setting, but if you can set this up using conditions I do believe its possible.


Leave a Reply