Unexpected shipping costs are one of the biggest reasons customers abandon their carts. If your WooCommerce store charges too much or the pricing feels confusing, then you could be losing sales without realizing it.
That’s why it’s so important to offer clear, fair shipping rates. And one of the simplest ways to do that is with weight-based shipping.
With this method, shipping costs are calculated based on the total weight of the cart. Lighter orders get lower rates, while heavier ones are charged more accurately, helping you cover your costs without turning customers away.
I’ve spent time testing both WooCommerce’s built-in tools and third-party plugins to find the best ways to set this up.
In this guide, I’ll show you exactly how to add weight-based shipping to your store. Plus, I will share some practical tips to avoid common pitfalls and keep your checkout process smooth. 🚚
Why Offer Weight-Based Shipping in WooCommerce?
Weight-based shipping ensures fair and accurate delivery costs by calculating rates based on the actual weight of the order.
Unlike flat rate shipping, which charges the same fee for every purchase, this method prevents overcharging for lightweight items and losing money on heavy ones.
By switching to weight-based shipping in your WooCommerce store, you get more control and flexibility. It removes guesswork, avoids surprises at checkout, and keeps costs transparent.
It’s especially useful for stores that sell heavy items, bundles, or a mix of lightweight and bulky products.
Whether you’re shipping furniture, books, or gym equipment, this helps you stay profitable while keeping shipping costs transparent for your customers.
Having said that, let’s take a look at how to easily add weight-based shipping in WooCommerce. I will cover two different methods in this tutorial. You can use the links below to jump to the method of your choice:
Method 1: Add Weight Based Shipping Using the Default Settings (Basic Settings)
If you want to set up weight-based shipping in WooCommerce without using any extra WooCommerce plugins or extensions, then this method is for you.
WooCommerce doesn’t come with a built-in weight-based shipping option, but there’s a simple workaround you can use.
Instead of a direct weight-based setting, you can use shipping classes to group products by their weight. Then, you can create different flat rates for each class within your shipping zones.
This way, heavier items can have higher shipping costs, and lighter ones can ship for less, all using the default WooCommerce settings.
💡 Pro Tip: Before you start, make sure you have set your preferred weight unit (e.g., kg, lbs, oz) for your store.
You can do this by navigating to WooCommerce » Settings » Products » General and selecting your unit from the ‘Weight unit’ dropdown menu. This ensures all your calculations are consistent.
For more help configuring your store, follow our complete guide to WooCommerce store setup.
To get started, visit the WooCommerce » Settings » Shipping » Classes page from the WordPress dashboard and click the ‘Add shipping class’ button.
In the pop-up that appears, add a name for your shipping class. I recommend choosing something clear that helps you quickly recognize the type of products it’s for.
For example, if you’re creating a class for all the items under 5 kg, then you might name it ‘Under 5kg.’
Then, you’ll need to add a slug for the class. You can also leave this blank, and WooCommerce will generate one based on the name you enter.
But if you want more control, you can enter your own.
Next, add a short note explaining what the shipping class is for. It’s mainly for your own reference or for other admins working on the site.
Then, go ahead and click the ‘Create’ button.
You can now repeat the process to add as many weight based shipping classes as you want.
Once you are done, it will look something like this:
Next, go to the ‘Shipping Zones’ tab. Here, you’ll see a list of all the shipping zones you’ve set up for your store. These zones represent the countries or regions where you offer shipping.
If you haven’t added a shipping zone yet, simply click the ‘Add zone’ button.
This will take you to a new screen where you can add a name. I recommend naming the zone after the region or country you’re offering shipping to, as this can help prevent any confusion.
After that, simply type the name of the region or country in the ‘Zone regions’ field. When the option appears, click on it to add it to your zone. You can add as many regions as you want.
Once you’re done, click the ‘Add shipping method’ button to proceed.
A new popup will now appear on your screen.
From here, select the ‘Flat rate’ option and click ‘Continue.’
In the next step, you’ll need to give your shipping method a name. This is important because your customers will see it at checkout.
A name like ‘Shipping Cost Based on Product Weight’ is clear and descriptive.
Next, add a cost for shipping in the ‘Cost’ field. This will be the default shipping cost that customers will pay when purchasing an item.
This is the base shipping cost for any product without a shipping class. Keep in mind, this cost can also be added to other shipping fees, which I’ll explain in a moment.
Next, scroll down to the ‘Shipping class costs’ section. Here, you can set a cost for each weight-based shipping class you’ve created.
For example, you might charge $10 for items in the 11–15 kg class and $20 for those in the 16–20 kg class.
⚠️ Important Note: WooCommerce adds the shipping class cost on top of the default flat rate. For example, if your default cost is $5 and the class cost is $10, then the total shipping fee for the customer will be $15.
To avoid this and use only the shipping class cost, you must set the main ‘Cost’ field for the flat rate to $0.
Just below the cost fields, you’ll also see a setting called ‘Calculation type’. This controls how WooCommerce calculates shipping when a cart contains items from multiple classes.
Here is how each option works:
- Per Class: WooCommerce will add the cost for each individual shipping class in the order. For example, if a customer has an item from the 11–15 kg class ($10 fee) and another from the 16–20 kg class ($20 fee), then the total added shipping cost will be $30.
- Per Order: WooCommerce will only apply the cost from the most expensive shipping class in the order. Using the same example, only the $20 fee would be added to the shipping rate.
For most stores that use weight-based shipping, the ‘Per class’ option gives you more accurate and fair pricing. This is especially helpful when orders often include products of varying weights.
Once you have chosen your ‘Calculation Type’, click the ‘Save’ button to store your settings.
Now, head over to the ‘Products’ page and open your preferred item in the WooCommerce editor. Scroll down to the ‘Product Data’ section and switch to the ‘Shipping’ tab.
First, you need to enter the product’s weight in the ‘Weight’ field. After that, you’ll need to select the correct shipping class from the ‘Shipping class’ dropdown menu.
💡 Pro Tip: Don’t forget to include the weight of your packaging materials (like boxes and bubble wrap) in the product’s total weight. This helps you charge accurate shipping fees and avoid losing money on postage.
For example, if your product weighs 0.45 kg, you would select the ‘Under 5kg’ class you created earlier.
After that, click the ‘Update’ or ‘Publish’ button to save your changes.
Now visit your WooCommerce store to see the shipping price based on your product’s weight.
While this method works well for simple setups, managing many different weight classes can become complicated.
So, if you have many products or need more flexible shipping rules, then using a dedicated plugin is a much easier solution.
Method 2: Add Weight Based Shipping Using a Plugin (Recommended)
For more powerful and flexible shipping rules, using a dedicated plugin is your best option.
I recommend the free WooCommerce Weight Based Shipping plugin because it allows you to create as many shipping rules as you want based on product weight. You can also set different rates for different countries and offer free shipping when a customer’s order reaches a certain total.
First, you need to install and activate the WooCommerce Weight Based Shipping plugin. For details, see our tutorial on how to install a WordPress plugin.
Upon activation, head over to the WooCommerce » Settings » Shipping » Weight Based Shipping page from the WordPress admin sidebar.
Here, click the ‘Set Up Global Shipping Rules’ button.
This will take you to a new screen where you can define weight-based shipping rules for your products. You’ll notice that the plugin comes with a few default rules already set up, but you can easily edit or delete them as needed.
You can start by adding a title for each rule. Choose names that help you quickly identify the weight range, such as ‘Under 5kg’ or ‘5-10kg’.
In the ‘Destination’ column, you can leave the setting as ‘Any’. This means the weight shipping rule will apply to all countries you ship to.
However, if you want to charge different shipping rates for specific regions, you can do that by selecting a country from the ‘Destination’ dropdown menu. This allows you to apply your weight-based shipping rule only to that location.
For example, let’s say your store is based in Europe. You might want to charge $5 for orders under 5kg going to France because it’s relatively close, and shipping is cheaper.
But for the same weight range being shipped to the USA, you could charge $10 or more to cover the higher shipping cost due to the longer distance.
After that, set the ‘From’ and ‘Up To’ weight values for each rule in the Weight column. For example, for the ‘Under 5kg’ rule, you can enter From: 0 and Up To: 5.
Once you’ve entered the numbers, click the ‘OK’ button to save the range.
Next, take a look at the ‘Value’ column. This is where you define when the shipping rule applies, usually based on the total order amount.
Let’s say you want to offer free shipping for small packages under 5kg, but only if the customer spends $100 or more. In that case, you can set the weight range from 0 to 5, and in the ‘Value’ column, enter 100.00+. Then, set the shipping cost to ‘Free.’
This means if someone orders products weighing under 5kg and their cart total is $100 or more, they won’t have to pay anything for shipping.
Now, you might also want to add another rule for customers who order less than $100 worth of items.
For that, create the same weight range—0 to 5kg—but in the ‘Value’ column, enter 0.00 – 99.99 and set the shipping cost to something like $10.
This means if the cart is under 5kg and the order total is below $100, then they’ll be charged $10 for shipping.
💡 Pro Tip: If you want the shipping rule to be based only on weight and ignore the cart’s total value, there’s an easy way to do it.
In the ‘Value’ column, simply enter 0.00
in the ‘From’ field and leave the ‘To’ field completely blank.
This tells the plugin to apply the rule to all orders, no matter how much they cost.
Now, it’s time to actually set the shipping cost based on weight. For this, expand the ‘Shipping’ tab for each rule. You can select the ‘Free’ option to offer free shipping.
Or, choose the ‘Flat’ option and add the shipping price based on weight.
You can also choose the ‘Flat + Progressive’ option, which is helpful if you sell heavier items that go beyond your defined weight rules.
For example, let’s say your rules go up to 30 kg. You can set a Flat rate of $20 for orders up to 30 kg. Then, in the Progressive field, you can add a cost of $2 per 1 kg.
Now, if a customer places an order that weighs 32 kg, they’ll be charged the initial $20 (for the first 30 kg) plus $4 (for the extra 2 kg), for a total shipping cost of $24.
This setup ensures you’re still covering your shipping costs fairly, even for heavier orders.
Next, add a note for each weight rule. This note is just for you and your team, and it helps keep things organized by explaining what each rule is for.
For example, you can write something like “Free shipping for small orders over $100” or “Extra charges for items over 30kg.”
Once you’ve added the notes, click the ‘Save’ icon to store your settings.
Next, you need to add the shipping method you created to one of your shipping zones.
From the ‘Shipping’ tab, click on a zone where you want to offer weight-based shipping. Then, click the ‘Add shipping method’ button.
This will open a popup on the screen, where you have to choose ‘Weight Based Shipping’ as the shipping method.
Next, click the ‘Continue’ button.
Then, head to the ‘Products’ page and open an item in the editor.
From here, scroll down to the ‘Product Data’ section and switch to the ‘Shipping’ tab. Now, you have to add the weight for the product to apply the shipping rules to it.
After that, simply click the ‘Update’ or ‘Publish’ button to store your settings.
Now, you can visit your WooCommerce store and add a product to your cart.
You should be able to see the delivery charges based on the products’ weight on the screen.
🎁 Bonus: Offer a Shipping Discount in WooCommerce
Offering weight-based shipping is great for making sure that your customers are paying a fair price. But if you’re also looking to increase your sales, then I recommend providing shipping discounts.
Many customers expect some kind of deal when it comes to shipping, especially for larger orders. Even a small discount can make a difference in conversions and customer satisfaction.
That’s why offering a shipping discount is a great way to reduce cart abandonment and increase your average order value.
To easily add shipping discounts to your WooCommerce store, I recommend using the Advanced Coupons plugin.
It’s beginner-friendly and gives you the power to easily create shipping discount rules.
For example, you can offer free shipping when a customer’s cart reaches a certain total, apply percentage-based discounts on shipping costs, or automatically trigger special shipping deals based on specific cart conditions.
Plus, you can combine these offers with your weight-based shipping rules for maximum flexibility.
To get started, see our tutorial on how to offer a shipping discount in WooCommerce.
FAQs: Weight Based Shipping in WooCommerce
Here are the answers to some common questions we get about setting up weight-based shipping in WooCommerce.
Do I have to add a weight to every single WooCommerce product?
Yes, for weight-based shipping to work correctly, you must enter a weight for each physical product in your store.
If a product doesn’t have a weight assigned, WooCommerce won’t be able to calculate the shipping cost for it accurately, and it may fall back to a default flat rate or show no shipping options at all.
What happens if a customer has both physical and digital products in their cart?
WooCommerce automatically handles this. Shipping costs will only be calculated based on the weight of the physical items in the cart. Digital products, since they don’t require shipping, have no weight and will not affect the shipping calculation.
Can I offer free shipping for certain WooCommerce orders?
Absolutely. With the default method, you can create a shipping class for a specific weight range and set its cost to $0.
With the plugin method, you can create a rule that offers free shipping when an order reaches a certain weight or cart value, giving you more flexibility.
My products have a very wide range of weights. What is the best way to handle this?
The best approach is to create several shipping rules to cover all your products. For very heavy items that might exceed your heaviest rule, the plugin method is ideal.
You can use its ‘Flat + Progressive’ option to set a base rate plus an extra charge per kg/lb, ensuring you always cover your costs for oversized orders.
I hope this article helped you learn how to easily add weight based shipping in WooCommerce. You may also want to see our beginner’s guide on how to add a free shipping bar in WooCommerce and our tutorial on how to prevent fraud and fake orders in WooCommerce.
If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.