WPML
الحالة
محلولة
أُبلغ عنها لـ
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;
    		};

جميع المشاكل المعروفة →