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