- 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; };