- ステータス
- 解決済み
- 報告対象
- WPML Media Translation 2.7.3
- 解決されたバージョン
- WPML 4.7.2
- トピックタグ
- Bug
問題の概要
WPML Media Translationでは、1つの画像を翻訳すると、似たようなファイル名パターンを持つすべての画像にその翻訳が意図せず適用されるという特異な動作があります。たとえば、img_file1.jpgという名前の画像を翻訳すると、img_file10.jpgやimg_file11.jpgのような他の画像にも影響が及びます… これらがまったく別の画像であるにもかかわらずです。
この問題は、メディア翻訳がファイル名のパターンに基づいて画像を処理および置換する仕組みに起因しており、ファイル名の構造の大部分が共通している場合に、意図しない置換が発生します。
回避策
続行する前に、サイトの完全なバックアップを必ず取得してください。
- …/wp-content/plugins/wpml-media-translation/classes/media-translation/class-wpml-media-translated-images-update.php ファイルを開きます。
- 76行目を探します。
- 次を:
$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; }; - 以下に置き換えます:
$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; };