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

Alle bekannten Probleme →