WPML
Estado
Resuelto
Notificado para
WPML Multilingual CMS 4.6.4
Plugin/tema relacionado
The Events Calendar
Etiquetas de temática
Compatibility

Resumen del problema

En ciertas situaciones, existe una discrepancia en cómo se manejan las traducciones de los enlaces del calendario en el plugin The Events Calendar (TEC) cuando se usa con WPML. En lugar de mostrar el término traducido esperado, el enlace de la fecha aparece incorrectamente como (/?:month|monat|miesic|….), por ejemplo.

Nota: Este problema debería haberse resuelto. Sin embargo, recibimos un informe similar recientemente.

Solución alternativa

Por favor, asegúrese de tener una copia de seguridad completa de su sitio antes de continuar.


  • Vaya a Usuarios > Su perfil y establezca su idioma predeterminado como idioma del usuario.

  • Vaya a Configuración > Enlaces permanentes y vuelva a guardar. A veces esta acción resuelve el problema.

  • Si no es el caso, añada el siguiente código a su archivo 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;
    }
  • Vaya a Configuración > Enlaces permanentes y vuelva a guardar de nuevo.
  • Después de eso, compruebe cómo funcionan los enlaces permanentes en el front-end para cada idioma.
  • Si el problema persiste, es posible que aún tenga algunas cadenas sin traducir. En ese caso, vaya a WPML > Traducción de cadenas y traduzca las cadenas con el dominio de texto the-events-calendar y el nombre TEC Calendar Slugs: ****.

Todos los problemas conocidos →