Some shops cannot price shipping by weight or by cart total, because what it costs to send a thing is a fact about the thing. Gatemi Per-Product Shipping lets you write that cost on the product itself.
Two numbers, not one. A cost that always multiplied by quantity charges £30 to post three t-shirts that go in one envelope; a cost that never multiplied charges £10 to post thirty. So every product carries what the first one costs and what each one after that adds. Leave the second empty and it is the same as the first; type 0 and the rest of the line rides free.
A product nobody has priced does not ship free — it means no rate. This is the part the category gets wrong. A cart holding one priced product and one unpriced one is quoted the first product's cost, the shopper pays it, and you post the second at your own expense and find out at the end of the month. Here the whole quote is withheld instead: WooCommerce shows whatever else the zone offers, and the settings screen names the products that need a cost. If you genuinely want everything else to ship free, type 0 into the shop-wide fallback — a decision you made, not one the plugin made for you.
It is a real shipping method. Add "Per-product shipping" to any shipping zone, alongside your other rates. It does not filter or rewrite what other plugins returned, so it does not fight them, it can be switched off for one zone, and it works with WooCommerce's own rate cache.
Where a cost comes from
In the order you would say it:
- The variation's own cost.
- The product's own cost — which a variation inherits when it has none.
- A cost on the product's shipping class, so "fragile" is priced once rather than on four hundred products.
- The shop-wide fallback.
Features
- A shipping cost on every product, in WooCommerce's own Shipping tab
- A cost on every variation, for the heavy colour of a light product
- A cost on any shipping class
- A shop-wide fallback — or deliberately none, so unpriced products stop the quote
- A floor and a ceiling for the whole package
- Free delivery over an amount, measured against the goods rather than goods plus postage
- A missing-cost report on the settings screen
- Amounts read the way people type them, so 1.250,00 is 1250 and not 1
- No database tables, no generated files, no storefront JavaScript
Every license includes
- One year of updates and priority support, delivered straight to your WordPress dashboard.
- Use on 1, 5 or 25 sites depending on your license — local, staging and development sites are always free.
- 30-day money-back guarantee — full refund, no questions asked.
- Keeps working after expiry — if you choose not to renew, the plugin keeps running exactly as installed; it simply stops receiving updates and support until you do.
Requires WordPress 6.4+ · PHP 7.4+ · tested up to WordPress 7.0. Works with the classic and block checkout alike.

Charlotte H. (verified owner) –
Better value than the big-name one I was using. I’ve had Per-Product Shipping on a busy shop for a full season. Would happily recommend it.
Joanne N. (verified owner) –
It works. It could be a bit friendlier about it.
Peter J. (verified owner) –
Works well, I’d just like a few more options. Fine purchase.
Christian G (verified owner) –
Einen halben Stern Abzug für die Dokumentation. Mit Single Site komme ich erst einmal zurecht. Per-Product Shipping ist ein vernünftiges Stück Software. Gut genug, dass ich aufgehört habe zu suchen.
Rachel N. (verified owner) –
Would have liked a preview before saving, but that’s me. Per-Product Shipping got there in the end, with a bit of reading.