WooCommerce shipping-class troubleshooting
Shipping-class cost missing or wrong? Test the exact Flat Rate
In core WooCommerce, a shipping class does not create a shipping option by itself. It adds a class cost inside an enabled Flat Rate method, so the product assignment, matched zone, Flat Rate fields, and calculation type must all agree.
Published · Updated · Shipping Contract Guard
The short answer
Open the Flat Rate method in the zone the address actually matches
Confirm that the product or variation has the intended shipping class. Then open the exact Flat Rate method in the matched zone and check that class’s cost field. Finally, check whether the method charges per class or per order.
If checkout has no shipping option at all, start with the no-shipping-options checklist before changing class costs.
Confirm the matched shipping zone
Use one complete made-up address and identify the first zone WooCommerce matches. Class costs are stored inside a Flat Rate method in a specific zone. Editing a similar method in another zone will not change this cart.
Check the product or variation’s class
Open the product’s shipping settings and confirm the saved class. For a variable product, check the exact variation in the test cart. A parent product and its variations can require separate attention.
Check the class cost in the exact Flat Rate method
Open the enabled Flat Rate method in the matched zone. Confirm the base cost, the intended shipping-class cost, and the “no shipping class” cost. An empty class cost does not create a separate rate; the result may use only the base cost.
Choose per class or per order deliberately
Per class adds the cost for each shipping class represented in the cart. Per order uses the most expensive shipping-class cost in the cart. The choice matters as soon as two classes appear together.
Test one class at a time, then mix them
Use a cart with only class A, a cart with only class B, and a mixed cart containing both. Keep the address and product quantities fixed. This reveals whether the class assignment, individual cost, or calculation type is wrong.
Check quantities and the base cost separately
A Flat Rate formula can multiply by quantity, while a base cost can apply once to the whole method. Record the expected result for one item and two items before combining products from different classes.
Repeat the same mixed cart after the change
Save one setting, clear stale cart data if necessary, and rerun the same products, quantities, and address. Do not change the class assignment and Flat Rate formula at the same time.
Worked example
Light and bulky products in one cart
Suppose the Flat Rate base cost is EUR 0, the Light class costs EUR 4, and the Bulky class costs EUR 12. The mixed-cart result depends on the calculation type.
| Cart | Per class | Per order |
|---|---|---|
| Light only | EUR 4 | EUR 4 |
| Bulky only | EUR 12 | EUR 12 |
| Light + bulky | EUR 16 | EUR 12 |
What if the class is correct but the price is still wrong?
Check the Flat Rate base cost, quantity formula, tax setting, and “no shipping class” cost. Then repeat the single-class and mixed carts. If another shipping extension supplies the rate, WooCommerce’s core Flat Rate class fields may not control it.
Save these carts for the next update →
Check which zone the address matched →
Check WooCommerce’s own instructions
WooCommerce documents that shipping classes group products but do not directly offer a rate. Its Flat Rate guide explains base costs, class costs, and per-class versus per-order calculation.
Read WooCommerce’s shipping-class guide →
Read WooCommerce’s Flat Rate guide →
Read WooCommerce’s core shipping checklist →
Save the single-class and mixed-cart results
Shipping Contract Guard saves the shipping options and prices you approve for each test cart, then compares them when the same checks run again. It places no order and uses no customer address.
Install free from WordPress.org