Skip to content Skip to sidebar

This thread is resolved. Here is a description of the problem and solution.

Problem:
You are experiencing intermittent issues with WooCommerce product URLs when using WPML. Specifically, product URLs in a secondary language occasionally use the category slug from the default language, leading to mixed-language URLs and causing infinite redirect loops and a 'too many redirects' error in the browser.
Solution:
1. Update WCML: Ensure you are using WooCommerce Multilingual & Multicurrency version 5.5.5 or later, as this issue was addressed in version 5.5.3.
2. Check translation settings: Temporarily disable the 'Translatable – use translation if available or fallback to the default language' setting and conduct tests to see if the issue persists.
3. Apply workaround: If the problem continues, consider implementing the code workaround provided on the errata page.

Please note that this solution might be irrelevant if it's outdated or not applicable to your specific case. We highly recommend checking related known issues at https://wpml.org/known-issues/, verifying the version of the permanent fix, and confirming that you have installed the latest versions of themes and plugins. If the issue persists, please open a new support ticket.

This is the technical support forum for WPML - the multilingual WordPress plugin.

Everyone can read, but only WPML clients can post here. WPML team is replying on the forum 6 days per week, 22 hours per day.

This topic contains 19 replies, has 0 voices.

Last updated by Andrey 2 months ago.

Assisted by: Andrey.

Author Posts
April 17, 2026 at 11:09 am #17976593

Andrey
WPML Supporter since 06/2013

Languages: English (English ) Russian (Русский )

Timezone: Europe/Kyiv (GMT+03:00)

Yes, of course. I will set the ticket status to “Waiting for user feedback” so it won’t be closed automatically soon.

May 6, 2026 at 7:31 pm #18018630

Giulio

We’ve identified the potential issue with term translation.

In our case, the get_the_terms filter consistently retrieves the WP_Term object in Italian (main language) from cache, but in some scenarios the term is not properly translated.

This behavior seems to be related with the get_term filter, specifically the get_term_adjust_id callback. Digging deeper, it points to WPML_Term_Adjust_Id::filter() and, more precisely, to the internal check are_functions_in_call_stack() when get_permalink() is present in the stack.

This made us wonder if the behavior is related with the known patch described here:

https://wpml.org/errata/woocommerce-multilingual-too-many-redirects-error-when-using-shop-base-with-category-permalinks/

However, in our setup products are translatable with fallback to the original language disabled when a translation is missing, so the patch would not be effective.

As a side note, if we temporarily comment out 'get_permalink' from the checked functions, everything works as expected and the correct translated term is returned.

Could you confirm whether this is expected behavior or a side effect of the mentioned fix?

At the moment we are trying a fix filtering "wc_product_post_type_link_product_cat" and translating the slug term when necessary.

Thanks in advance.

May 8, 2026 at 1:10 pm #18022965

Andrey
WPML Supporter since 06/2013

Languages: English (English ) Russian (Русский )

Timezone: Europe/Kyiv (GMT+03:00)

Thank you for the update.

To properly confirm your question, I need a reliable way to reproduce the issue you are experiencing so I can escalate it to our team for further testing. Until we can consistently replicate the behavior, any conclusions would unfortunately remain assumptions.

Theoretically, based on your setup:

* Products are translatable, with fallback to the original language disabled
* Taxonomies are also translatable, with fallback disabled
* The category term itself is not properly translated (meaning not translated at all)

In that scenario, I would expect one of the following behaviors:

* the product permalink in the secondary language should not include the category slug, or
* the category should either be translated properly or fallback mode should be enabled

To go further, I created a sandbox site and tried to simulate your setup. I performed the following steps:

* Created several categories and translated them
* Created products, assigned categories, and translated the products
* Set the permalink structure to:
/shop/%product_cat%/
* Deleted one translated category
* Disabled fallback mode and set (for taxonomies and products):
“Translatable – only show translated items”

Results:

* Products assigned to properly translated categories worked correctly:
hidden link
* Products assigned to non-translated categories resulted in a redirect issue when switching to Italian:
hidden link

This seems somewhat similar to the behavior you described, but I might be missing a detail. If so, you need to make sure that all product categories are translated correctly in every language.

If you are able to adapt the wc_product_post_type_link_product_cat workaround for your setup, it may be a practical solution for the time being.

The following private reply contains the link to the sandbox site, in case you want to look at that setup.

May 12, 2026 at 8:44 am #18029560

Giulio

Hello,

we accessed the staging environment, but we realized that the test performed is not representative of the actual issue. The problem does not concern different categories, but rather different products belonging to the same category.

To better clarify the issue, let’s take a “shoes” category as an example. We are currently encountering mixed URLs such as:

/en/shop/shoes-english/nike-english/ - In this case, both the category taxonomy and the product slug are correctly displayed in English.

/en/shop/scarpe/adidas-english/ - Here, instead, the category taxonomy remains in Italian, while the product slug is in English.

Furthermore, while continuing the custom debugging process we are developing internally, we also identified even more anomalous cases — although extremely rare — where URLs from the main language contain elements translated into a secondary language.

For example:

/negozio/shoes-english/nike-italiano/ - In this case, the category taxonomy is in English, while the product slug is in Italian.

Or:

/negozio/shoes-spanish/nike-italiano/

Please note that we are referring to a multilingual installation configured with:

/en

/fr

/de

while the main language is published directly on the root /

In light of all this, our developer also pointed out that the approach used in the staging environment risks compromising the analysis itself, since a new — evidently very recent — version of WPML has been installed there, whereas our live website has been running WPML for more than 5 years.

This is precisely why we expected a more in-depth and professional approach to investigating the issue, potentially including direct database checks in order to identify inconsistencies that may have accumulated over time.

At the moment, instead, we find ourselves attempting to replicate an issue that is extremely difficult to reproduce within an environment that does not accurately reflect the actual state of the original website, inevitably leading to incomplete conclusions.

For this reason, we are once again requesting that the issue be escalated, so that it can be analyzed more thoroughly and with an approach that is more aligned with the real condition of the installation.

Thank you.

May 12, 2026 at 2:04 pm #18030796

Andrey
WPML Supporter since 06/2013

Languages: English (English ) Russian (Русский )

Timezone: Europe/Kyiv (GMT+03:00)

Thank you for your feedback and for providing the examples.

The sandbox site I created was intended to simulate the issue and compare the behavior against your current setup. However, I understand that the issue on your live site occurs under different conditions specific to your environment and configuration.

If you have not yet updated WPML and its add-ons to the latest versions on your live site, I would strongly recommend doing so first. While this may not necessarily resolve the issue directly, it ensures that we are troubleshooting using the latest available codebase, including recent bug fixes, compatibility improvements, and stability updates.

If the issue still persists after updating, I would encourage you to create a new staging site using a full copy of your current live environment, where the issue can be reliably reproduced. Having access to a staging site that accurately reflects the state of the production site will allow me to properly investigate and confirm the behavior.

Once I am able to consistently reproduce and verify the issue, I can escalate it to our development team for deeper analysis and further troubleshooting.

Thank you.