VAT-Exempt / Tax-Inclusive Pricing
The plugin’s most nuanced feature. This article explains exactly when it applies, what it changes, and how to verify it — read it before enabling Fix prices for VAT-exempt locations.
Table of Contents
The problem
This affects a specific configuration:
- Your store is set to “I will enter prices inclusive of tax” (WooCommerce → Settings → Tax), and
- You sell to customers in countries/regions where no VAT applies.
In that setup, WooCommerce stores prices with your base country’s tax baked in. On the cart/checkout it correctly removes that tax for a tax-exempt customer — but on archive and product pages, WooCommerce often still displays the price with the base-country VAT included for those visitors. So a customer in a VAT-free location sees, say, £12.00 (inc. 20% UK VAT) on the shop page, then £10.00 at checkout. That mismatch is what this feature fixes.
What the fix does
When enabled, for stores entering prices inclusive of tax, the plugin:
- Strips the embedded base-country tax from variation prices when the visitor’s resolved tax location has no matching tax rates for that product’s tax class. The displayed price on archive/product pages then matches what they’ll actually pay.
- Keys WooCommerce’s variation-price cache by the visitor’s tax location, so a price calculated for one location can never be served from cache to a visitor in another location. This second part is invisible but essential — without it the fix would leak prices between visitors.
It only acts when tax is enabled, prices include tax, the product is taxable, and the visitor is genuinely exempt at their location.
When to enable it
Enable only if both conditions at the top apply. Specifically:
- ✅ Prices entered inclusive of tax and you sell into VAT-free regions → enable.
- ❌ Prices entered exclusive of tax → leave off (WooCommerce already shows ex-tax prices correctly).
- ❌ You only sell domestically / everyone pays the same tax → leave off (nothing to strip).
If in doubt, leave it off and check whether your archive prices already match checkout for an exempt location before turning it on.
How “tax-exempt location” is decided
The plugin resolves the visitor’s taxable address using your WooCommerce “Calculate tax based on” setting (shipping address, billing address, or store base), then:
- If their location matches your store base, they are treated as not exempt (they pay base tax).
- Otherwise it looks up tax rates for their location and tax class. No matching rates → exempt, and the base tax is stripped.
This means it follows real WooCommerce tax configuration rather than guessing.
Important caveats
- Single-variation products are skipped. For a variable product with exactly one visible variation, WooCommerce 10.4+ already performs the tax adjustment natively. The plugin deliberately does not also adjust those, because doing both would strip the tax twice. (Multi-variation products are adjusted by the plugin.)
- It’s a display fix at the price-cache level. It corrects what visitors see on archive/product pages so it agrees with the cart — it doesn’t change your tax rules or what’s charged.
- Cache correctness depends on the hash change. The feature adds the tax location to WooCommerce’s price-cache key; this is automatic, but it’s why you may see more distinct cached price variants for variable products (one per location). That’s expected and correct.
Advanced: trusting the explicit VAT-exempt flag
By default the plugin determines exemption purely from the visitor’s resolved location and the matching tax rates. There is a developer constant, WC_AJAX_PRICING_TRUST_VAT_EXEMPT (default false), that controls whether an explicit is_vat_exempt flag on the customer (e.g. set by an EU VAT-number plugin) is also trusted to trigger the strip. It’s off by default because of a known WooCommerce edge case around that flag. See Developer Reference → Constants.
Verifying
- Pick a product and note its inclusive price (with base VAT).
- Simulate a visitor in a VAT-free location for your store (e.g. set the test country, or use a location your tax tables don’t cover).
- With the setting off, the archive price still shows base VAT. Enable the setting and reload — the archive price should now drop by the base tax amount and match what that visitor would pay at checkout.
- Confirm a base-location visitor still sees the full inclusive price (they should be unaffected).
Troubleshooting
- Prices didn’t change after enabling: confirm your store actually enters prices inclusive of tax, the product is taxable, and the test visitor’s location genuinely has no matching tax rate. If the location matches your store base, no change is expected.
- A single-variation product didn’t change: expected — WooCommerce handles that case natively (see caveats).
- Need to trace the logic: a developer can enable verbose logging via
WC_AJAX_PRICING_VERBOSE_LOGGINGto see the exemption decision in the log (Developer Reference → Constants). Turn it off afterwards — it logs customer location detail.