- 状态
- 已解决
- 报告针对
- WPML Multilingual CMS 4.6.4
- 相关插件/主题
- The Events Calendar
- 主题标签
- Compatibility
问题概述
在某些情况下,当 The Events Calendar (TEC) 插件与 WPML 结合使用时,日历链接翻译的处理方式会出现差异。例如,日期链接没有显示预期的翻译词汇,而是错误地显示为 (/?:month|monat|miesic|….)。
注意:此问题本应已解决。但是,我们最近收到了类似的报告。
临时解决方法
在继续操作之前,请确保对您的网站进行了完整备份。
- 前往用户 > 个人资料,并将默认语言设置为用户语言。
- 前往设置 > 固定链接并重新保存。有时此操作即可解决问题。
- 如果问题仍未解决,请将以下代码添加到您的 functions.php 文件中:
/* * 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; } - 再次前往设置 > 固定链接并重新保存。
- 之后,检查前端每种语言的固定链接是否正常工作。
- 如果问题仍然存在,您可能还有一些未翻译的字符串。在这种情况下,请前往 WPML > 字符串翻译,并翻译文本域为
the-events-calendar且名称为TEC Calendar Slugs: ****的字符串。