WPML
Statut
Résolu
Signalé pour
WPML Media Translation 2.7.3
Résolu dans
WPML 4.7.2
Étiquettes de sujet
Bug

Aperçu de l’anomalie

Dans WPML Media Translation, il existe un comportement particulier où la traduction d’une image s’applique par inadvertance à toutes les images qui partagent un modèle de nom de fichier similaire. Par exemple, la traduction d’une image nommée img_file1.jpg affecte également d’autres images comme img_file10.jpg ou img_file11.jpg… bien qu’il s’agisse d’images distinctes.

Le problème provient de la façon dont la Traduction des médias traite et remplace les images en fonction des modèles de noms de fichiers, ce qui entraîne des remplacements involontaires lorsque les noms de fichiers partagent une partie importante de leur structure.

Solution de contournement

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


  • Ouvrez le fichier …/wp-content/plugins/wpml-media-translation/classes/media-translation/class-wpml-media-translated-images-update.php.

  • Recherchez la ligne 76.

  • Remplacez :
    		$media_src_contains_pre_update = function ( $media_src ) use ( $pre_update_translated_media_guid ) {
    			$thumb_file_name                   = basename( $pre_update_translated_media_guid );
    			$pre_update_translated_media_parts = explode( '.', $thumb_file_name );
    
    			$media_src_extension                   = pathinfo( $media_src, PATHINFO_EXTENSION );
    			$pre_update_translated_media_extension = is_array( $pre_update_translated_media_parts ) ? end( $pre_update_translated_media_parts ) : null;
    
    			return $pre_update_translated_media_parts[0] && false !== strpos( $media_src, $pre_update_translated_media_parts[0] ) && $media_src_extension === $pre_update_translated_media_extension;
    		};

  • Par :
    		$media_src_contains_pre_update = function ( $media_src ) use ( $pre_update_translated_media_guid ) {
    			$thumb_file_name                   = basename( $pre_update_translated_media_guid );
    			$pre_update_translated_media_parts = explode( '.', $thumb_file_name );
    
    			$media_src_extension                   = pathinfo( $media_src, PATHINFO_EXTENSION );
    			$pre_update_translated_media_extension = is_array( $pre_update_translated_media_parts ) ? end( $pre_update_translated_media_parts ) : null;
    			$pattern = "/-d+xd+.".$pre_update_translated_media_parts[1]."$/";
    			$try = preg_replace($pattern, '.'. $pre_update_translated_media_parts[1], $media_src);
    			return $pre_update_translated_media_parts[0] && false !== str_contains( implode('.', $pre_update_translated_media_parts), $try ) && $media_src_extension === $pre_update_translated_media_extension;
    		};

Toutes les anomalies connues →