- 状态
- 已解决
- 报告针对
- 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; };