- The method does not appear at checkout
- My tier prices will not save, or revert when I reopen the modal
- The "Add Tier" button does nothing
- A cart is being charged the wrong tier
- A cart heavier than my top tier still gets a price
- The calculated weight is lower than the real parcel
- Free shipping is not firing
- The handling fee is not being added
- Changing the tiers did not change what the customer sees
- The maximum-weight message shows but other methods are still available
- Does it work with the block cart and checkout?
- Does it work with HPOS?
- Does it work with variable products, bundles and subscriptions?
- Can I charge different rates per country?
- Can I offer two weight-based options in the same zone?
- Can I set rates per shipping class, or exclude some products?
- Can I charge a price per kg?
- What weight unit does it use?
- Can I translate the method title and the maximum-weight message?
- Where are the settings stored, and can I copy them to another site?
- Is anything locked behind a Pro version?
- Where to go next
If Weight-Based Shipping for WooCommerce does not appear at checkout, check that the address falls in the zone, the method is enabled, the cart is under the Maximum Weight Limit, and Handle Zero Weight is not hiding it. Review each zone’s method at WPFactory > Weight-Based Shipping (also reachable at WooCommerce > Settings > Shipping).
Each answer below is based on how the method calculates rates. If tier prices will not save, update to version 1.3.2 or later first.
The method does not appear at checkout #
Work through these in order. Each one removes the method completely, so only the first failing check matters.
- Is the customer’s address in the zone? WooCommerce matches the shipping address to exactly one zone and only offers that zone’s methods. Check WooCommerce > Settings > Shipping and confirm the region list.
- Is the method enabled? Open the method in the zone and check Enable/Disable. A method can also be toggled off from the zone’s method list.
- Is the cart over the Maximum Weight Limit? If it is, the method withdraws on purpose and your maximum-weight message is shown on the cart.
- Does the cart weigh zero? If none of the products in the cart has a weight entered, and Handle Zero Weight is set to Hide shipping method, that is the designed behavior. Set it to Use first tier cost if you would rather still quote.
- Is the customer’s address complete? WooCommerce will not calculate rates for a zone it cannot determine. A missing country or postcode can be enough.
My tier prices will not save, or revert when I reopen the modal #
This was a real bug, fixed in 1.3.2. Earlier versions posted the tier rows in a format that WooCommerce’s shipping-zone settings modal discarded on save, so the values never reached the database. Update to 1.3.2 or later and re-enter the tiers once.
If you are already on 1.3.2 or later and tiers still do not persist, the usual cause is a JavaScript error from another plugin breaking the modal before it submits. Open the browser console, reload the shipping settings page, and look for errors from other scripts.
The “Add Tier” button does nothing #
Same cause as above: something on the page has broken the admin JavaScript. That script only adds, removes and validates rows; saving does not depend on it. If you can get one row on screen, it will save even with the script broken.
A cart is being charged the wrong tier #
Three behaviors account for nearly every case.
A weight sitting exactly on a boundary. Tiers run from the minimum inclusive to the maximum exclusive. With tiers of 0 to 5 and 5 to 10, a cart of exactly 5 is in the second tier, not the first. This became consistent in 1.3.3; before that, boundary weights were ambiguous.
A gap in the table. With tiers of 0 to 5 and 10 to 20 and nothing between, a 7 kg cart matches nothing and falls back to the last tier’s cost: the 10 to 20 price, not the 0 to 5 one. Close the gap: each row’s maximum should be the next row’s minimum.
Overlapping rows. Where two ranges cover the same weight, the one with the lower minimum wins. The admin highlights overlaps in red as you type, but it does not stop you saving them.
A cart heavier than my top tier still gets a price #
That is intended. If your top tier has a blank maximum, it covers everything above its minimum, which is what a blank maximum is for. If your top tier has a maximum, a heavier cart matches nothing and falls back to that same top tier’s cost anyway.
Either way the method quotes rather than disappearing. If you want heavy carts refused, set a Maximum Weight Limit.
The calculated weight is lower than the real parcel #
The plugin can only add up weights that exist on the products.
- A product with an empty Weight field contributes nothing. No warning is shown.
- A variation with no weight of its own falls back to its parent product’s weight. If the parent is blank too, the line contributes nothing.
- Virtual products are left out of the shipping package by WooCommerce, so they never count toward the weight.
- Packaging weight is not added anywhere. If your boxes matter, either build them into the tier costs or use a fixed handling fee.
To find the gaps, open the Shipping tab of each product in your test cart (and each variation) and check the Weight field.
Free shipping is not firing #
By cart total. The figure compared is the value of the goods in the package: before tax, after coupon discounts, excluding shipping and fees. An order total of 152.00 can easily sit below a 150 threshold once tax is taken back out.
By weight. This threshold makes shipping free when the cart is at or above the weight, so it frees up heavy carts. If nothing ever triggers, check you have not set it expecting the opposite direction. For “light orders ship free”, use a bottom tier with a cost of 0 instead.
Also confirm the field is not empty (an empty field disables the threshold entirely) and that you are testing the zone whose instance you edited.
The handling fee is not being added #
- Free shipping is in effect. Fees are deliberately skipped on a free rate.
- Handling Fee is unticked.
- Handling Fee Amount is 0.
- You set a percentage expecting a percentage of the cart. It is a percentage of the shipping cost: 10% on a 20.00 tier cost is 2.00.
Changing the tiers did not change what the customer sees #
WooCommerce caches calculated shipping rates in the customer’s session, so a test cart can keep showing an old rate for a while.
To see your change: empty the cart and add the product again, or test in a private window. While testing, you can also turn on Enable debug mode under WooCommerce > Settings > Shipping > Shipping options, which bypasses the shipping rate cache. Turn it off again when you are done.
The maximum-weight message shows but other methods are still available #
That is correct. The message is a cart notice explaining why this method withdrew; the other methods in the zone are unaffected and the customer can still choose one. If you want an over-limit cart to have no options at all, this needs to be the only method in that zone.
Does it work with the block cart and checkout? #
Yes. Compatibility with the Cart & Checkout Blocks is declared, and the method returns an ordinary WooCommerce rate that the blocks render like any other.
Does it work with HPOS? #
Yes, and there is nothing to configure. The plugin reads cart contents during rate calculation and never touches order storage, so High-Performance Order Storage is a non-event for it. Compatibility is declared so WooCommerce does not flag the plugin.
Does it work with variable products, bundles and subscriptions? #
The plugin does not check the product type. It asks each cart line for its weight and multiplies by quantity, so anything that reports a weight is counted: simple products, variations, and product types added by other plugins.
Variations get the parent-weight fallback described above. For bundles and other plugin product types, what counts is whatever weight each cart line reports, so check how your bundle plugin places items and weights in the cart.
Can I charge different rates per country? #
Yes, through zones. Create a zone per country or region, add Weight-Based Shipping to each, and give each its own table. The instances share nothing: different tiers, fees, thresholds and limits per zone. Step by step: how to set different weight-based rates per zone or country.
Can I offer two weight-based options in the same zone? #
Yes. Add the method twice to the same zone, title one Economy and the other Express, and configure each independently. The customer sees both. See how to offer economy and express weight-based options.
Can I set rates per shipping class, or exclude some products? #
No. Weight-Based Shipping reads only the total package weight. It does not look at shipping classes, categories or individual products, and it has no exclusion list. Products you do not want to count must have no weight, or be handled by a different method or zone.
Can I charge a price per kg? #
Not continuously. Each tier has one fixed cost for its whole weight range. To get close to a per-kg price, use narrower tiers (for example one per kg) with rising costs.
What weight unit does it use? #
Whatever WooCommerce > Settings > Products > General > Weight unit is set to: kg, g, lbs or oz. Every number in the method is read in that unit and nothing is converted. If you change the store’s unit later, your tier boundaries keep their numbers and silently change meaning; go through each zone and restate them.
Can I translate the method title and the maximum-weight message? #
Both are settings, so the simplest route is to type them in your store’s language. For multilingual stores they are stored as ordinary WooCommerce shipping-method options and can be translated with a string-translation tool the same way Flat Rate’s title is.
The plugin’s own strings use the wc-weight-shipping text domain and a POT file ships in languages/.
Where are the settings stored, and can I copy them to another site? #
Each zone instance stores its settings in a single WooCommerce option keyed by the method id and the instance id. Copying between sites means copying that option to an instance with the same id, which rarely lines up on a different install, so re-entering the table is usually faster and safer. The exact key is in the developer reference.
Is anything locked behind a Pro version? #
No. The plugin code has no Free/Pro gating: every setting described in these docs is available once Weight-Based Shipping is installed. See the settings reference for the full list.
Where to go next #
Get Weight-Based Shipping #
Every setting covered here is included in Weight-Based Shipping for WooCommerce, with no locked Pro options. Get Weight-Based Shipping.
Still stuck? Our team answers every ticket on the Weight-Based Shipping support forum.