- סטטוס
- נפתר
- דווח עבור
- 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; };