WPML
Trạng thái
Đã giải quyết
Được báo cáo cho
WPML Media Translation 2.7.3
Đã giải quyết trong
WPML 4.7.2
Thẻ chủ đề
Bug

Tổng quan về lỗi

Trong WPML Media Translation, có một hành vi kỳ lạ là khi dịch một hình ảnh, bản dịch đó vô tình được áp dụng cho tất cả các hình ảnh có chung mẫu tên tệp tương tự. Ví dụ: việc dịch một hình ảnh có tên img_file1.jpg cũng ảnh hưởng đến các hình ảnh khác như img_file10.jpg hoặc img_file11.jpg… mặc dù chúng là các hình ảnh riêng biệt.

Vấn đề phát sinh từ cách Dịch phương tiện xử lý và thay thế hình ảnh dựa trên mẫu tên tệp, dẫn đến việc thay thế ngoài ý muốn khi các tên tệp có chung một phần lớn trong cấu trúc của chúng.

Giải pháp tạm thời

Vui lòng đảm bảo có một bản sao lưu toàn bộ trang web của bạn trước khi tiếp tục.


  • Mở tệp …/wp-content/plugins/wpml-media-translation/classes/media-translation/class-wpml-media-translated-images-update.php.

  • Tìm dòng 76.

  • Thay thế:
    		$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;
    		};

  • Bằng:
    		$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;
    		};

Tất cả các lỗi đã ghi nhận →