WPML
Statut
Résolu
Signalé pour
WPML Multilingual CMS 4.6.4
Extension/thème associé
The Events Calendar
Étiquettes de sujet
Compatibility

Aperçu de l’anomalie

Dans certaines situations, on observe une incohérence dans la façon dont les traductions des liens de calendrier sont gérées dans l’extension The Events Calendar (TEC) lorsqu’elle est utilisée avec WPML. Au lieu d’afficher le terme traduit attendu, le lien de date apparaît de manière incorrecte sous la forme (/?:month|monat|miesic|….), par exemple.

Remarque : Ce problème aurait dû être résolu. Cependant, nous avons reçu un signalement similaire récemment.

Solution de contournement

Veuillez vous assurer de disposer d’une sauvegarde complète de votre site avant de continuer.


  • Allez dans Comptes > Votre profil et définissez votre langue par défaut comme langue de l’utilisateur.

  • Allez dans Réglages > Permaliens et enregistrez à nouveau. Parfois, cette action résout le problème.

  • Si ce n’est pas le cas, ajoutez le code suivant à votre fichier 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;
    }
  • Allez dans Réglages > Permaliens et enregistrez à nouveau.
  • Ensuite, vérifiez comment les permaliens fonctionnent sur l’interface publique pour chaque langue.
  • Si le problème persiste, il se peut que vous ayez encore des chaînes non traduites. Dans ce cas, allez dans WPML > Traduction de chaînes et traduisez les chaînes avec le domaine de texte the-events-calendar et le nom TEC Calendar Slugs: ****.

Toutes les anomalies connues →