- Status
- Gelöst
- Gemeldet für
- WPML Media Translation 2.7.3
- Gelöst in
- WPML 4.7.2
- Themen-Tags
- Bug
Übersicht über das Problem
In WPML Media Translation gibt es ein merkwürdiges Verhalten, bei dem die Übersetzung eines Bildes versehentlich auf alle Bilder angewendet wird, die ein ähnliches Dateinamenmuster aufweisen. Beispielsweise wirkt sich die Übersetzung eines Bildes namens img_file1.jpg auch auf andere Bilder wie img_file10.jpg oder img_file11.jpg aus … obwohl es sich um unterschiedliche Bilder handelt.
Das Problem entsteht durch die Art und Weise, wie die Medienübersetzung Bilder basierend auf Dateinamenmustern verarbeitet und ersetzt, was zu unbeabsichtigten Ersetzungen führt, wenn Dateinamen einen wesentlichen Teil ihrer Struktur gemeinsam haben.
Problemumgehung
Bitte stellen Sie sicher, dass Sie ein vollständiges Backup Ihrer Website haben, bevor Sie fortfahren.
- Öffnen Sie die Datei …/wp-content/plugins/wpml-media-translation/classes/media-translation/class-wpml-media-translated-images-update.php.
- Suchen Sie nach Zeile 76.
- Ersetzen Sie:
$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; }; - Durch:
$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; };