Buy with country-zone prices
Country-zone prices remain server-authoritative after a customer leaves a cacheable catalog page. Classic WooCommerce pages, Cart and Checkout Blocks, the mini-cart, and Store API cart operations all resolve the current WooCommerce customer country before calculating commercial totals.
This guide is for store owners, support teams, and developers who need to verify that a regional product price remains consistent from add-to-cart through a completed order.
Before you begin
- Configure at least one enabled zone and one enabled fallback zone.
- Save and index the applicable product's country-price rows.
- Keep WooCommerce Price Based on Country and its Pro add-on inactive.
- Use a supported simple, variation, subscription, or subscription-variation product for this workflow.
- Keep Cart, Checkout, My account, Store API,
wc-ajax, and mini-cart fragment requests outside shared page caching.
Add from a classic product or catalog page
- Visit the product from a country assigned to the test zone.
- Wait for the regional product state to finish loading.
- Add the product to the cart.
- Open the cart and mini-cart.
- Confirm the unit price, line subtotal, and cart total use the same regional product amount shown on the product page.
The browser does not submit an accepted product price. WooCommerce loads the product again, resolves the current customer country, and records current country-price evidence on the cart line after WooCommerce creates the line identity.
If the current price cannot be resolved or previously stored line evidence fails its identity, amount, or revision checks, the line becomes unavailable instead of retaining a stale or partially trusted amount. Checkout remains blocked until the product data is corrected or the affected line is removed.
The customer's resolved country must also belong to WooCommerce's effective selling-country list. A country outside that list cannot purchase any country-priced product, even when the fallback zone can supply a price. The unmatched-country display setting independently decides whether that visitor sees the fallback price or no price.
Add from Cart or Checkout Blocks
- Add the same product through a compatible WooCommerce block.
- Open the Cart Block or Checkout Block.
- Confirm the line price and totals match the classic cart for the same customer country and tax settings.
- Refresh the page and confirm the cart retains the same resolved result.
Store API responses include a read-only pom-country-zone-pricing extension. Product, cart, cart-item, and checkout responses identify the resolved zone and context revision. Product and cart-item responses also provide a pricing revision and the resolved regional mode. The extension has no update callback and accepts no browser-calculated price.
Change country before payment
- Add a product while the customer uses the first test country.
- In cart or checkout, change the shipping country to a country in another zone. When shipping is not applicable, change the billing country.
- Wait for WooCommerce to finish updating the order review.
- Confirm the notice Prices and totals were updated for the selected country. appears when the resolved zone changes.
- Confirm the line price, coupon result, normal WooCommerce taxes, subtotal, and total now use the new zone.
- Change back to the original country and confirm the calculation returns to the original regional amount.
WooCommerce's confirmed customer address takes precedence over the earlier geolocation. Recalculation is idempotent: repeated total calculations replace the regional product base rather than adding it again.
Current POM Product Add-On selections are rebuilt in that exact cart-line zone as part of the same country update. Fixed amounts and tiers move to the new zone, percentage amounts use the new regional product or component base, and a customer-entered custom price is checked again against the new zone's minimum and maximum. Transitional official WooCommerce Product Add-Ons rows are also resolved from the exact zone, but only while their stable field identity and option match remain unambiguous. A selection that no longer satisfies those current regional rules blocks checkout and asks the customer to review the cart; historical subscription renewals keep their stored snapshot instead.
If the product or selected variation is Unavailable in this zone, the cart and Store API expose an unavailable-product error and checkout cannot complete until the line is removed or the country changes.
The same fail-closed behavior applies when the selected country is not one of WooCommerce's allowed selling countries. A stale cart line cannot bypass this rule: classic checkout and the Store API both recheck the server-resolved country and purchasing state.
Verify the mini-cart
- Add the product and open the mini-cart.
- Change the customer country in cart or checkout.
- Allow WooCommerce cart fragments or the Blocks cart data store to refresh.
- Reopen the mini-cart and confirm its price reflects the recalculated cart.
The mini-cart uses WooCommerce's calculated cart line. It does not use the catalog hydration response because its amount can also depend on quantity, taxes, coupons, and session state.
Complete and review an order
- Complete checkout after the final country and totals are visible.
- Go to WooCommerce → Orders and open the order.
- Confirm each line subtotal, discount, tax, and total matches the amount accepted at checkout.
- Confirm the customer email shows the same stored order amounts.
- Retrieve the order through the supported WooCommerce REST API or a test webhook and confirm both use the stored line and order totals.
- Change the product's country-zone price after the order is complete.
- Reload the order, email preview, REST response, and webhook payload. Confirm the historical amounts do not change.
The order stores private technical country-zone evidence through WooCommerce CRUD, including the final zone and pricing revisions. WooCommerce order and line totals remain the historical authority for administration, email, REST, and webhook output. Current catalog prices are never used to rewrite an existing order.
Verify commercial integrations
For POM Product Add-Ons, test a fixed option, flat fee, quantity amount, percentage, custom-price limits, and a reusable choice in two zones. Fixed amounts and limits use their zone override when present; an empty override inherits the global amount. Percentage values remain global but calculate from the regional product base. The Store API cart extension and completed order snapshot identify the applied zone without exposing the complete zone map.
For a POM Composite product, compare a component, fixed total or base, fixed management fee, fixed component adjustment, and percentage adjustment in two zones. Component products use their own regional product values. Fixed configured amounts use their zone override, percentage adjustments use the regional component base, and changing country creates a new zone-specific quote identity before the cart is accepted.
For WooCommerce Subscriptions, verify these deliberately different flows:
- An initial purchase stores its current country, zone, recurring amount, sign-up fee, add-on evidence, and Composite evidence where applicable.
- A renewal uses the stored subscription zone and historical recurring snapshot. It does not geolocate or reread a later catalog price.
- A switch uses the subscription's stored zone and the target product's current regional catalog values in that zone. WooCommerce Subscriptions prorates between the historical source and current target.
- Resubscribe is a new purchase and therefore uses the customer's current confirmed country and current catalog configuration.
If a stored switch zone has been removed or disabled, the switch fails closed and asks for correction instead of silently pricing the target in another zone.
Important choices and limits
- The store currency, coupon rules, tax rules, shipping methods, and payment methods remain normal WooCommerce settings.
- The regional product base is recalculated until the order is created. The cart does not permanently lock the country used when the line was first added.
- A country change inside the same zone may leave totals unchanged and does not need a zone-change notice.
- Product Add-On and Composite cart lines keep their own server-authoritative adjustment and configuration records in addition to the country-zone product context.
- The commercial snapshot contains only the applied context and resolved values; private zone maps remain server-side configuration.
- Disabling the tweak removes its hooks. It does not rewrite existing order totals or remove historical country-zone evidence.
Troubleshooting
The cart still shows the previous zone
Confirm the shipping or billing address update completed and that the cart request bypasses every shared cache. Then confirm the product index is ready and no conflicting country-pricing plugin is active.
A product cannot be purchased after changing country
First review WooCommerce → Settings → General → Selling location(s) and confirm the selected country is allowed. Then edit the product and review the selected zone's mode. A disallowed selling country or a product or variation saved as Unavailable in this zone deliberately blocks add-to-cart and checkout.
A fallback country shows no price but should still be visible
Go to Settings → POM Tweaks → E-Commerce → Products and set Price in unmatched countries to Show the effective fallback/default price. This changes presentation only; WooCommerce's selling-country list still decides whether purchase is allowed.
The mini-cart does not refresh
Confirm WooCommerce cart fragments or the Blocks cart data store is active and not cached. Reload the cart page to verify the server total first; catalog price hydration does not refresh cart fragments.
Store API output has no POM extension
Confirm the country-zone tool is enabled, its zone configuration is valid, and its product index is ready. The commercial runtime and Store API extensions remain unregistered when those prerequisites fail.