Open
Reported for: WPML SEO 2.1.0.1
Overview of the issue
When the Remove parent slugs option is enabled in the Rank Math SEO plugin with WooCommerce, it leads to a problem with the translation of product categories. If you switch to a secondary language from a product category page, it points to the untranslated category slug, leading to a 404 error page.
Workaround
Please, make sure of having a full backup of your site before proceeding.
- Open …/wp-content/plugins/seo-by-rank-math/includes/modules/woocommerce/class-permalink-watcher.php file.
- Look for line 124.
- Replace this code:
$permalink_structure = wc_get_permalink_structure(); $category_base = trailingslashit( $permalink_structure['category_rewrite_slug'] ); $is_language_switcher = ( class_exists( 'Sitepress' ) && strpos( $link, 'lang=' ) );
- With:
$permalink_structure = wc_get_permalink_structure(); // WPML Workaround for compsupp-6895 if ( class_exists('Sitepress') ) { $args = array('element_id' => $term->term_id, 'element_type' => $taxonomy ); $term_language_info = apply_filters( 'wpml_element_language_details', null, $args ); $permalink_structure['category_rewrite_slug'] = apply_filters('wpml_translate_single_string', $permalink_structure['category_rewrite_slug'], 'WordPress', 'URL '.$taxonomy.' tax slug', $term_language_info->language_code ); } $category_base = trailingslashit( $permalink_structure['category_rewrite_slug'] ); $is_language_switcher = ( class_exists( 'Sitepress' ) && strpos( $link, 'lang=' ) );
Temporary fix. Bug comes back again after each new update of rank math. Useless.
Hi there,
Thanks for your feedback, and sorry for the inconvenience. Unfortunately, until either our team or the Rank Math SEO developers implement a permanent fix, you’ll need to reapply this workaround after each update.
WPML SEO 2.1.0. released on September 5, 2022.
Sure, it will be very fast from now, just a couple of years
Hi,
We understand the frustration. Since the related code is part of RankMath SEO, any fix would likely require changes on their end or a hook our developers can use to handle it from our side.