WPML
状态
已解决
报告针对
WPML Media Translation 2.7.3
解决于
WPML 4.7.2
主题标签
Bug

问题概述

WPML Media Translation 中,存在一种特殊行为:翻译一张图像会无意中将该翻译应用到所有具有相似文件名模式的图像上。例如,翻译名为 img_file1.jpg 的图像也会影响 img_file10.jpgimg_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;
    		};

所有已知问题 →