- Status
- Resolvido
- Relatado para
- WPML Multilingual CMS 4.6.4
- Plugin/tema relacionado
- The Events Calendar
- Tags de tópico
- Compatibility
Visão geral do problema
Em certas situações, há uma discrepância na forma como as traduções de links do calendário são tratadas no plugin The Events Calendar (TEC) quando usado com o WPML. Em vez de exibir o termo traduzido esperado, o link da data aparece incorretamente como (/?:month|monat|miesic|….), por exemplo.
Observação: Este problema deveria ter sido resolvido. No entanto, tivemos um relato semelhante recentemente.
Solução alternativa
Por favor, certifique-se de ter um backup completo do seu site antes de prosseguir.
- Vá para Usuários > Seu perfil e defina seu idioma padrão como o idioma do usuário.
- Vá para Configurações > Links permanentes e salve novamente. Às vezes, essa ação resolve o problema.
- Se não for o caso, adicione o seguinte código ao seu arquivo 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; } - Vá para Configurações > Links permanentes e salve novamente.
- Depois disso, verifique como os links permanentes funcionam no front-end para todos os idiomas.
- Se o problema persistir, você ainda pode ter algumas strings não traduzidas. Nesse caso, vá para WPML > Tradução de Strings e traduza as strings com o domínio de texto
the-events-calendare o nomeTEC Calendar Slugs: ****.