WPML
Stato
Risolto
Segnalato per
WPML Media Translation 2.7.3
Risolto in
WPML 4.7.2
Tag dell’argomento
Bug

Panoramica del problema

In WPML Media Translation, si verifica un comportamento peculiare per cui la traduzione di un’immagine si applica inavvertitamente a tutte le immagini che condividono un pattern simile nel nome del file. Ad esempio, la traduzione di un’immagine denominata img_file1.jpg interessa anche altre immagini come img_file10.jpg o img_file11.jpg… nonostante si tratti di immagini distinte.

Il problema nasce dal modo in cui Traduzione media elabora e sostituisce le immagini in base ai pattern dei nomi dei file, causando sostituzioni involontarie quando i nomi dei file condividono una parte significativa della loro struttura.

Soluzione alternativa

Assicurati di avere un backup completo del tuo sito prima di procedere.


  • Apri il file …/wp-content/plugins/wpml-media-translation/classes/media-translation/class-wpml-media-translated-images-update.php.

  • Cerca la riga 76.

  • Sostituisci:
    		$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;
    		};

  • Con:
    		$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;
    		};

Tutti i problemi noti →