WPML
الحالة
محلول
النوع
خطأ برمجي
تم الإبلاغ عنه لـ
WPML Media Translation 2.7.4
تم الحل في
WPML 4.7.2
وسوم الموضوع
Bug

نظرة عامة على المشكلة

إذا كنت تستخدم إضافة WPML Media Translation، فقد تواجه مشكلة عند ترجمة صورة كبيرة جداً تؤدي إلى تفعيل ميزة التحجيم في WordPress، ثم حذف إحدى الترجمات. نتيجة لذلك، يُحذف ملف الصورة الأصلي أيضاً، وسيكون هناك رابط صورة معطوب في اللغة الأصلية.

حل بديل مؤقت

يُرجى التأكد من أخذ نسخة احتياطية كاملة لموقعك قبل المتابعة.


  • افتح الملف …/wp-content/plugins/sitepress-multilingual-cms/classes/media/class-wpml-attachment-action.php.

  • ابحث عن السطر 171.

  • استبدل:
    	public function delete_file_filter( $file ) {
    		if ( $file ) {
    			$file_name           = $this->get_file_name( $file );
    			$sql                 = "SELECT pm.meta_id, pm.post_id FROM {$this->wpdb->postmeta} AS pm
    						WHERE pm.meta_value = %s AND pm.meta_key='_wp_attached_file'";
    			$attachment_prepared = $this->wpdb->prepare( $sql, [ $file_name ] );
    			$attachment          = $this->wpdb->get_row( $attachment_prepared );
    
    			if ( ! empty( $attachment ) ) {
    				$file = null;
    			}
    		}
    
    		return $file;
    	}

  • بـ:
    	public function delete_file_filter( $file ) {
    		if ( $file ) {
    			$file_name           = $this->get_file_name( $file );
    			$test = explode('.', $file_name);
    			$sliced = array_slice($test, 0, -1);
    			$scaled = implode('.', $sliced);
    			$ext = '-scaled.'. end($test);
    			$processed = $scaled.$ext;
    
    			$sql                 = "SELECT pm.meta_id, pm.post_id FROM {$this->wpdb->postmeta} AS pm 
    						WHERE pm.meta_value = %s OR pm.meta_value = '$processed' AND pm.meta_key='_wp_attached_file'";
    			$attachment_prepared = $this->wpdb->prepare( $sql, [ $file_name ] );
    			$attachment          = $this->wpdb->get_row( $attachment_prepared );
    
    			if ( ! empty( $attachment ) ) {
    				$file = null;
    			}
    		}
    
    		return $file;
    	}

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