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

Todos os problemas conhecidos →