The v1.6 release line had two parallel tracks. The first was making WooCommerce fully language-aware — it has many ways to render product data and cart UI, and none of them naturally respect the built-in language system context. The second was stability of the built-in language system itself, particularly around how translation relationships are stored and kept consistent when Polylang is also present on the site. We worked through both, layer by layer, across v1.6.1 through v1.6.11.
Alongside that, we shipped a multi-fallback AJAX detection chain, a repair tool for translation link relationships, a language switcher protection fix, and several new admin tools for translation management.
Full WooCommerce Language Isolation
This was the headline work of the v1.6 cycle. WooCommerce touches a lot of different surfaces — product archive queries, short description fields, the mini-cart AJAX fragment, cart and checkout URL generation, and translation file loading on init. Each one needed its own fix.
Product queries
The Elementor Products widget, Loop Grid, related products, upsells, and cross-sells all now resolve to the current-language product instead of always falling back to the default language.
Short descriptions
WooCommerce short descriptions (post_excerpt) are now localized at display time, not just at translation time. This means old translations that missed this field still render correctly without needing to be re-translated.
Mini-cart
Product names, product links, "View cart", and "Proceed to Checkout" buttons in the mini-cart AJAX fragment now return in the visitor's language. Previously these would render in the default language regardless of what language the visitor was browsing in.
Cart and checkout URLs
When WooCommerce builds cart or checkout links — for example after adding a product to the cart — they now point to the language-specific URL instead of always going to the default language.
Add-to-cart redirect
This was the trickiest fix. WooCommerce fires the add-to-cart action on wp_loaded, before parse_request runs — meaning the language hadn't been detected yet when the redirect URL was being built. The fix reads REQUEST_URI directly to detect the language prefix at that early stage.
Translation file loading (v1.6.11)
WooCommerce and theme .mo files were loading in the default locale because they load on init before the plugin had a chance to detect the language. Fixed by hooking filter_locale to detect language from the URL before any .mo file loads, and calling switch_to_locale() on init:99 to force-reload anything that loaded in the wrong language.
AJAX Language Detection Chain
WooCommerce cart operations happen via AJAX — there's no URL to parse, and standard language detection falls back to the default. We built a full multi-fallback chain to handle every scenario:
- REQUEST_URI path prefix — fastest, works for early hooks like
wp_loaded - AJAX referer header — works for cart fragment requests where the original page URL is in the referer
- Language cookie (
aitrfoel_lang) — set on normal page loads as a last-resort fallback - WooCommerce Store API — REST requests detected via the
REST_REQUESTconstant
This chain powers all WooCommerce cart, mini-cart, and checkout URL filters so they return the right language URL in every context.
Repair Translation Links Tool
The plugin maintains its own internal record of which posts are translations of each other. On sites that also run Polylang, those records need to stay in sync with Polylang's own relationship metadata. After imports, bulk operations, or plugin migrations, the two can drift apart — translated posts still exist but the link data is inconsistent.
The repair tool gives you visibility into and control over that state:
- Scan mode counts genuine inconsistencies without touching anything.
- Repair mode reconciles broken translation groups in both the plugin's own data and the corresponding Polylang metadata, and confirms with a count of what was fixed.
- Shows a green "All links are already consistent" message when nothing needs fixing.
This tool lives in the SEO section rather than WooCommerce — the inconsistency affects all post types, not just products.
Language Switcher Protection
We discovered a subtle conflict: the link localization feature — which rewrites internal absolute URLs to add the current-language prefix — was also rewriting the language switcher's own links. This turned "switch to French" into "stay in English with a French URL" in the href, while the visible link text still said French.
The switcher hrefs are now identified and exempted from the rewriting logic.
Elementor Pro Loop Grid and Products Widget
The WP_Query filters that rewrite product IDs to current-language equivalents weren't catching queries fired by Elementor Pro's products widget and Loop Grid. Those widgets use a different filter — elementor/query/query_args — rather than the standard pre_get_posts.
We added a dedicated hook for that filter so Elementor Pro product grids now respect the visitor's language the same way standard WooCommerce queries do.
Admin Tooling
A few admin tools were added across the v1.5.x to v1.6.x arc that are worth calling out together:
SEO Retranslation
Batch re-translates Rank Math and Yoast meta titles and descriptions for pages that were translated before SEO translation was active. Idempotent — safe to run multiple times.
Short Descriptions
A separate batch tool for WooCommerce post_excerpt fields. Includes a force-override checkbox for pages that already have a short description translation but need it updated.
Translation Status Checker
Shows how many translated pages have missing or untranslated SEO titles versus correctly translated ones. Correctly handles Rank Math and Yoast template variables like %%title%% that don't need translation and shouldn't be flagged as problems.
v1.6.1–v1.6.11 Full Changelog
v1.6.11
- WooCommerce and theme
.motranslation files now load in the correct locale: hookedfilter_localeto detect language from the URL before any file loads, and callswitch_to_locale()oninit:99to force-reload anything that loaded in the wrong language.
v1.6.10
- Add-to-cart redirect now goes to the language-specific cart URL: reads
REQUEST_URIdirectly to detect language prefix at the earlywp_loadedstage, beforeparse_requestruns.
v1.6.9
- Mini-cart AJAX fragment now returns product names, product links, "View cart", and "Proceed to Checkout" in the visitor's language via the full AJAX language detection chain.
v1.6.8
- Cart and checkout URLs generated by WooCommerce now point to the language-specific URL instead of always defaulting to the default language.
v1.6.7
- Built full multi-fallback AJAX language detection chain:
REQUEST_URIpath prefix → AJAX referer header →aitrfoel_langcookie →REST_REQUESTconstant. - Language cookie is now set on normal page loads for use as a last-resort fallback in AJAX contexts.
v1.6.6
- Language switcher links are now exempted from link localization rewriting, fixing "switch to French" links that were incorrectly keeping the visitor in English.
v1.6.5
- WooCommerce short descriptions (
post_excerpt) are now localized at display time, ensuring old translations that missed this field render correctly. - Added Short Descriptions batch retranslation tool with force-override checkbox.
v1.6.4
- Elementor Pro Loop Grid and Products widget queries now pass through the language-aware product ID rewrite filter via a dedicated
elementor/query/query_argshook.
v1.6.3
- Added Repair Translation Links tool (SEO section): scan mode counts Polylang relationship inconsistencies; repair mode reconciles broken groups.
- Added Translation Status checker: shows missing vs correctly translated SEO titles with correct handling of Rank Math/Yoast template variables.
v1.6.2
- Product queries from Elementor Products widget, Loop Grid, related products, upsells, and cross-sells now resolve to the current-language product.
- Added SEO Retranslation tool: batch re-translates Rank Math/Yoast meta for pages translated before SEO translation was active.
v1.6.1
- Initial WooCommerce language isolation groundwork: hooked core WooCommerce product query filters to respect the current-language context.
Try the latest v1.6 build
If your site uses WooCommerce with a multilingual setup, v1.6 is the most complete language isolation we've shipped. Every surface — products, cart, checkout, mini-cart, and translation files — now speaks the visitor's language.
