- 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; };