Resolved
Reported for: WPML Multilingual CMS 4.6.4
Overview of the issue
In certain situations, there is a discrepancy in how calendar link translations are handled in The Events Calendar (TEC) plugin when used with WPML. Instead of displaying the expected translated term, the date link incorrectly appears as (/?:month|monat|miesic|….), for example.
Note: This issue should have been resolved. However, we had a similar report recently.
Workaround
Please, make sure of having a full backup of your site before proceeding.
- Go to Users > Your profile and set your default language as User language.
- Go to Settings > Permalinks and re-save. Sometimes this action solves the issue.
- If it is not the case, add the following code to your functions.php file:
/* * WPML Workaround for compsupp-6815 */ add_filter( 'tribe_rewrite_canonical_url', 'wpml_compsupp6815_resolve_missing_urls', 10, 3 ); function wpml_compsupp6815_resolve_missing_urls( $resolved, $url, $object ) { if ( class_exists('Sitepress') ) { $wpml_default_lang = apply_filters('wpml_default_language', NULL ); $wpml_current_lang = apply_filters( 'wpml_current_language', NULL ); // Let's register the calendar strings so we can translate and use in the workaround if ($wpml_default_lang == $wpml_current_lang ) { $events_slug = $tec_options['eventsSlug']; $single_events_slug = $tec_options['singleEventSlug']; $tec_options = get_option('tribe_events_calendar_options'); do_action( 'wpml_register_single_string', 'the-events-calendar', 'TEC Calendar Slugs: '.substr($events_slug, 0, 20), $events_slug); do_action( 'wpml_register_single_string', 'the-events-calendar', 'TEC Calendar Slugs: '.substr($single_events_slug, 0, 20), $single_events_slug ); foreach ($tec_options['tribeEnableViews'] as $calendar_string) { do_action( 'wpml_register_single_string', 'the-events-calendar', 'TEC Calendar Slugs: '.substr($calendar_string, 0, 20), $calendar_string); } } // Check if the URL is not resolved yet. If not, we will resolve it with the translated strings if ( preg_match( '#/(/?:.+)#', $resolved ) ) { $resolved = preg_replace_callback( '#/(/?:.+?)#', function($matches) use ($url) { $options = explode('|', trim($matches[0], '/(?:)')); $slug = $options[0]; $translated_slug = apply_filters('wpml_translate_single_string', $slug , 'the-events-calendar', 'TEC Calendar Slugs: '.substr($slug, 0, 20) ); // Only apply the translation if the string already exists in the URL. If not, replace with the original. This may avoid possible 404 errors if (in_array(strtolower($translated_slug), $options) && $translated_slug != '') { $slug = $translated_slug; } return '/' . $slug; }, $resolved ); } } return $resolved; }
- Go to Settings > Permalinks and re-save again.
- After that, check how the permalinks work on the front-end for every language.
- If the issue remains, you may still have some untranslated strings. In that case, go to WPML > String Translation and translate the strings with the
the-events-calendar
textdomain andTEC Calendar Slugs: ****
name.
I have this problem just in two languages.
I did this and it didn’t work.
Any additional advise?
Thanks in advance.
It didn’t work for me.
Any additional advise?
Thanks.
If this workaround didn’t help, please open a chat in our assistance. In that way, one of our specialists will investigate your situation further.
Regards