- Estado
- Resuelto
- Notificado para
- WPML Media Translation 2.7.3
- Resuelto en
- WPML 4.7.2
- Etiquetas de temática
- Bug
Resumen del problema
En WPML Media Translation, existe un comportamiento peculiar por el cual, al traducir una imagen, la traducción se aplica de forma inadvertida a todas las imágenes que comparten un patrón similar en el nombre del archivo. Por ejemplo, traducir una imagen llamada img_file1.jpg también afecta a otras imágenes como img_file10.jpg o img_file11.jpg… a pesar de ser imágenes distintas.
El problema surge por la forma en que Traducción de medios procesa y reemplaza las imágenes basándose en los patrones de los nombres de los archivos, lo que provoca reemplazos no deseados cuando los nombres de los archivos comparten una parte importante de su estructura.
Solución alternativa
Por favor, asegúrese de tener una copia de seguridad completa de su sitio antes de continuar.
- Abra el archivo …/wp-content/plugins/wpml-media-translation/classes/media-translation/class-wpml-media-translated-images-update.php.
- Busque la línea 76.
- Reemplace:
$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; }; - Por:
$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; };