- Status
- Resolvido
- Relatado para
- WPML Media Translation 2.7.3
- Resolvido em
- WPML 4.7.2
- Tags de tópico
- Bug
Visão geral do problema
No WPML Media Translation, há um comportamento peculiar em que traduzir uma imagem aplica inadvertidamente a tradução a todas as imagens que compartilham um padrão de nome de arquivo semelhante. Por exemplo, traduzir uma imagem chamada img_file1.jpg também afeta outras imagens, como img_file10.jpg ou img_file11.jpg… apesar de serem imagens distintas.
O problema surge da maneira como a Tradução de mídia processa e substitui as imagens com base em padrões de nome de arquivo, resultando em substituições não intencionais quando os nomes de arquivo compartilham uma parte significativa de sua estrutura.
Solução alternativa
Por favor, certifique-se de ter um backup completo do seu site antes de prosseguir.
- Abra o arquivo …/wp-content/plugins/wpml-media-translation/classes/media-translation/class-wpml-media-translated-images-update.php.
- Procure a linha 76.
- Substitua:
$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; };