WooCommerce 11.1 changes the Macanese pataca symbol from P to MOP$ and the Zambian kwacha symbol from ZK to K. Core output becomes more accurate, but themes, symbol-override filters, gateways, PDF invoices, ERP exports, product feeds, emails, analytics, and cached fragments can keep older labels. The amount may be correct while a customer, agent, or finance system sees inconsistent currency identification.
Use this for stores charging or reporting MOP or ZMW, multi-currency sites, cross-border catalogs, payment gateways, accounting exports, subscriptions, refunds, invoice plugins, and marketplaces.
Quick answer
Create one synthetic order and refund for each currency before and after 11.1. Compare ISO code, raw amount, minor-unit handling, formatted symbol, symbol position, spacing, locale, gateway request, gateway dashboard, order screen, customer email, PDF, feed, export, analytics, and support view. Remove stale overrides that reproduce the old core symbol. Keep ISO codes in machine records and use symbols only for presentation, especially where K can be ambiguous.
Test scenarios to run
Run the same controlled fixture across these branches. Write down the expected result before testing so a surprising response is easy to identify.
| Scenario | Fixture | Expected result |
| MOP sale | 100.00 before and after | MOP$ shown, MOP stored |
| ZMW sale | 100.00 before and after | K shown, ZMW stored |
| Refund | Partial amount | Same ISO and precision |
| Stale override | Old symbol filter active | Detected and removed or owned |
Diagnostic table
Use this table to connect the observed behavior to evidence and a verification step.
| Action | Evidence to collect | How to verify |
| Map every currency formatter, override, cache, and external handoff. | Inventory woocommerce_currency_symbol filters, theme formatting, multi-currency settings, gateways, invoices, feeds, exports, emails, caches, and analytics. | Product, cart, checkout, order, email, PDF, account, and refund displays agree. |
| Keep ISO code and decimal amount as the machine contract. | Create matched MOP and ZMW product, cart, checkout, order, refund, coupon, tax, shipping, and subscription fixtures. | Gateway, ERP, feed, and analytics records retain the correct ISO code and amount. |
| Remove obsolete core-symbol overrides or scope deliberate business overrides explicitly. | Record ISO code, amount, minor units, formatted string, symbol position, spacing, locale, and exchange-rate source at every handoff. | No active filter silently restores an obsolete symbol. |
| Regenerate emails, PDFs, feeds, exports, and cached fragments for synthetic fixtures. | Compare gateway request and dashboard, WooCommerce order, customer email, PDF receipt, ERP row, feed, analytics, and support tooling. | Cache purges and rollback produce a predictable single symbol policy. |
What to check first
- Inventory woocommerce_currency_symbol filters, theme formatting, multi-currency settings, gateways, invoices, feeds, exports, emails, caches, and analytics.
- Create matched MOP and ZMW product, cart, checkout, order, refund, coupon, tax, shipping, and subscription fixtures.
- Record ISO code, amount, minor units, formatted string, symbol position, spacing, locale, and exchange-rate source at every handoff.
- Compare gateway request and dashboard, WooCommerce order, customer email, PDF receipt, ERP row, feed, analytics, and support tooling.
- Purge page, fragment, object, email-template, PDF, feed, CDN, and browser caches before declaring mixed output fixed.
Field notes
- Use synthetic IDs and examples that can be traced from the first request or interaction to the final record.
- Keep a before and after result for every changed setting, package, selector, route, or deployed version.
- Separate user-visible success from internal success so a green interface cannot hide a failed request or inaccessible control.
- Review the evidence after caches, queues, browser history, and scheduled work have had time to settle.
Useful command or data shape
Adapt paths, IDs, and privacy handling to the site before running commands or storing data on production.
currency,iso_amount,expected_display
MOP,100.00,MOP$100.00
ZMW,100.00,K100.00
record_fields:
currency_code: required
amount: decimal
display_string: presentation_only
Why this usually happens
- A custom symbol filter keeps P or ZK after core changes.
- A PDF or email plugin formats from its own currency table.
- A feed or ERP stores display strings instead of ISO code plus numeric amount.
- Fragment and document caches preserve a prior symbol after deployment.
Decision rule
Approve WooCommerce 11.1 when MOP and ZMW retain correct ISO codes and amounts everywhere, presentation symbols match the owned policy, and no stale override or cache creates mixed receipts.
Production verification checklist
- Product, cart, checkout, order, email, PDF, account, and refund displays agree.
- Gateway, ERP, feed, and analytics records retain the correct ISO code and amount.
- No active filter silently restores an obsolete symbol.
- Cache purges and rollback produce a predictable single symbol policy.
Safe fix order
Use a sequence that makes each result easy to prove. Stop when new evidence changes the scope or owner of the problem.
- Map every currency formatter, override, cache, and external handoff.
- Keep ISO code and decimal amount as the machine contract.
- Remove obsolete core-symbol overrides or scope deliberate business overrides explicitly.
- Regenerate emails, PDFs, feeds, exports, and cached fragments for synthetic fixtures.
- Reconcile sale, refund, subscription, analytics, and finance records before promotion.
Mistakes to avoid
- Changing production before recording exact versions, UTC timestamps, settings, stable fixture IDs, and a reproducible baseline.
- Treating one successful screen as proof that keyboard access, APIs, caches, jobs, reports, analytics, and downstream records agree.
- Testing only an administrator session instead of the devices, roles, networks, locales, and failure branches customers use.
- Closing the work without a named owner, rollback point, observation window, and contextual incoming link from an established guide.
Questions teams ask during testing
Can this be tested on production?
Use production for read-only checks and one narrow synthetic fixture that cannot charge a card, send customer email, expose personal data, or change inventory. Run upgrades, package changes, cache changes, and destructive repairs on staging first.
What evidence should the test report keep?
Keep exact versions, UTC timestamps, stable synthetic IDs, expected and actual results, screenshots or response excerpts, the decision owner, rollback point, and final verification. Redact credentials, tokens, customer data, private addresses, and infrastructure details.
How long should the observation window stay open?
Keep it open long enough to include at least one cache cycle, scheduled job cycle, and representative traffic period. For release changes, include logged-in and logged-out use plus the first real operational handoff.
When is the task complete?
Complete it when the primary user path passes, downstream records reconcile, failure branches are understood, monitoring is active, and an established owner page links to this guide in context.
What to tell the client or owner
Give the site owner the affected versions, exact synthetic fixture, UTC timeline, before and after evidence, cause class, decision, rollback point, unresolved risks, and next review date. State which measurements prove success and which observation window remains open.
When HandL WP should help
Bring in help when this affects leads, checkout, search visibility, security, paid media reporting, or a client production site. HandL WP can trace the issue through WordPress, hosting, cache, tracking, and Search Console, then verify the workflow after the technical fix.
If this is active on a production site, audit WooCommerce currency output.
Related HandL WP guides
Use these related guides when the same issue touches tracking, security, checkout, or crawler visibility.
Helpful references