- Статус
- Решено
- Заявлено для
- WPML Media Translation 2.7.3
- Решено в
- WPML 4.7.2
- Теги темы
- Bug
Обзор проблемы
В WPML Media Translation наблюдается специфическое поведение, при котором перевод одного изображения непреднамеренно применяется ко всем изображениям, имеющим схожий шаблон имени файла. Например, перевод изображения с именем 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; };