WPML
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-calendar e o nome TEC Calendar Slugs: ****.

Todos os problemas conhecidos →