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_` 4 แห่งในคิวรีด้านบน)

คุณสามารถเรียกใช้คิวรีดังกล่าวได้โดยใช้ 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;
});

ปัญหาที่ทราบแล้วทั้งหมด →