- สถานะ
- แก้ไขแล้ว
- แก้ไขใน
- 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;
});