WPML
الحالة
محلولة
تم حلها في
WooCommerce Multilingual & Multicurrency 5.5.2
وسوم الموضوع
WCML

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

إذا كان لديك منتجات مترجمة مسبقاً باستخدام محرر الترجمة الكلاسيكي (CTE) ثم حدّثت إعدادات WPML لاستخدام ATE (للترجمات الجديدة فقط)، فإن تعديل تلك المنتجات المترجمة مسبقاً سيفتحها عن طريق الخطأ في ATE بدلاً من CTE.

(يؤثر هذا تحديداً على المنتجات وليس على أنواع المنشورات الأخرى.)

حل بديل مؤقت

تظهر المشكلة لأن التفاصيل الخاصة بالمحرر الذي استُخدم تُحفظ بشكل خاطئ للمنتجات.

يتمثل جزء من الحل في إصلاح ذلك، بحيث عند ترجمة المنتجات عبر CTE، يُسجل محرر الترجمة بشكل صحيح حتى تُفتح في المحرر الصحيح في المرة القادمة.

ولكن يتعين علينا أيضًا إصلاح جميع البيانات الحالية التي تسجل المحرر الخاطئ للمنتجات التي عُدلت بالفعل باستخدام CTE.

لنتعامل مع هذا الجزء الثاني أولاً، والذي نحتاج من أجله إلى تشغيل استعلام SQL المخصص هذا:

UPDATE wp_icl_translate_job AS job
JOIN (
    SELECT job.job_id
    FROM wp_icl_translate_job AS job
    LEFT JOIN wp_icl_translation_status AS status ON job.rid = status.rid
    LEFT JOIN wp_icl_translations AS translations ON status.translation_id = translations.translation_id
    WHERE translations.element_type = 'post_product'
) AS derived
ON job.job_id = derived.job_id
SET job.editor = 'wpml'
WHERE job.editor = 'wp';

إذا كانت قاعدة بياناتك تستخدم بادئة مختلفة عن `wp_` للجداول، فستحتاج هذه إلى التعديل (هناك أربع إشارات إلى `wp_icl_` في الكود أعلاه).

يمكنك تشغيل هذا الاستعلام باستخدام phpMyAdmin أو عبر إضافة Adminer.

ثم لضمان حفظ تفاصيل المحرر بشكل صحيح مستقبلاً، تحتاج إلى إضافة ما يلي (عبر إضافة لمقتطفات الأكواد أو إلى ملف functions.php الخاص بالقالب):

/**
 * WPMLSUPP-12927: Temporary fix to correctly record CTE editor for products
 */
add_filter( 'wpml_translation_editor_save_job_data', function( $data ){

	if ( $data['job_post_type'] == "post_product" ) {

		add_action( 'wpml_save_job_fields_from_post', function( $job_id ){

			wpml_tm_load_old_jobs_editor()->set( $job_id, 'wpml' );
		});
	}

	return $data;
});

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