วิธีการแปลฟิลด์ที่กำหนดเองของ ACF ใน WordPress – กลุ่มฟิลด์ Repeater หน้าตัวเลือก
เรียนรู้วิธีการแปลฟิลด์ที่กำหนดเองของ ACF ทุกฟิลด์บนเว็บไซต์ WordPress ของคุณเป็นทุกภาษาที่ผู้เยี่ยมชมของคุณใช้ คู่มือนี้ครอบคลุมถึงกลุ่มฟิลด์ Repeater ฟิลด์ Flexible Content ฟิลด์รูปภาพ หน้าตัวเลือก และป้ายกำกับฟิลด์ ACFML จะกำหนดเส้นทางของฟิลด์ ACF และ ACF Pro ผ่านเวิร์กโฟลว์การแปลของ WPML เพื่อให้ได้รับการแปลไปพร้อมกับเนื้อหาโพสต์ของคุณ
ก่อนที่คุณจะเริ่มต้น
ติดตั้งและเปิดใช้งานปลั๊กอินเหล่านี้:
- Advanced Custom Fields หรือ ACF Pro
- WPML และ WPML การแปลสตริง
- ACFML (ส่วนเสริมที่ครอบคลุมในหน้านี้)
กลุ่มฟิลด์ของคุณควรได้รับการกำหนดค่าใน ACF เรียบร้อยแล้ว คุณสามารถเปลี่ยนการตั้งค่าการแปลของแต่ละฟิลด์ได้ในภายหลัง ดังนั้นลำดับการทำงานจึงไม่มีผลใด ๆ ให้ตั้งค่ากลุ่มฟิลด์ก่อน แล้วจึงกลับมาที่ ACFML
เลือกตัวเลือกการแปลสำหรับแต่ละกลุ่มฟิลด์
กลุ่มฟิลด์ ACF ไม่ได้มีพฤติกรรมเหมือนกันทั้งหมดเมื่อทำการแปล ACFML มีตัวเลือกการแปลสามแบบสำหรับแต่ละกลุ่มฟิลด์ หากต้องการเลือกตัวเลือก:
- ไปที่ ACFField Groups แล้วแก้ไขกลุ่มฟิลด์
- ในส่วน Multilingual Setup ภายใต้ Select a translation option for this field group ให้คลิก Choose ในตัวเลือกที่คุณต้องการ
- บันทึกกลุ่มฟิลด์
ACFML จะทำเครื่องหมายตัวเลือกที่แนะนำสำหรับเว็บไซต์ของคุณเป็น recommended for this site หากต้องการเลือกตัวเลือกอื่นในภายหลัง ให้คลิก Change option สำหรับ ACFML เวอร์ชันเก่าจะเรียกสองตัวเลือกแรกว่า Same fields across languages และ Different fields across languages
เนื้อหาเดียวกันในทุกภาษา แปลแล้ว
การตั้งค่าทั่วไปสำหรับเว็บไซต์ ACF ส่วนใหญ่ ผู้เยี่ยมชมในทุกภาษาจะเห็นหน้าเดียวกันในภาษาของตนเอง ข้อความจะถูกแปล และเลย์เอาต์รวมถึงการตั้งค่าจะยังคงเหมือนเดิม หน้า ทีมงานของเรา เป็นตัวอย่างที่พบบ่อย ทีมของคุณจะเหมือนกันในทุกภาษา ดังนั้นชื่อและประวัติของสมาชิกในทีมแต่ละคนจะถูกแปล และโครงสร้างฟิลด์จะยังคงเดิม คุณป้อนข้อมูลทีมในภาษาเริ่มต้น จากนั้นส่งโพสต์เพื่อทำการแปลจาก WPMLการแปลแดชบอร์ด ค่าที่แปลแล้วจะกลับมาอยู่ในฟิลด์เดิม ตัวเลือกนี้ทำงานร่วมกับการแปลอัตโนมัติและ แปลทุกอย่าง
แต่ละภาษามีเนื้อหาของตัวเอง
ใช้ตัวเลือกนี้เมื่อแต่ละภาษาแสดงเนื้อหาที่แตกต่างกันในกลุ่มฟิลด์เดียวกัน ตัวอย่างที่พบบ่อยคือบริษัทที่จัดกิจกรรมในท้องถิ่น หน้า กิจกรรม ภาษาอังกฤษจะแสดงกิจกรรมสำหรับผู้ชมที่ใช้ภาษาอังกฤษ และหน้าภาษาฝรั่งเศสจะแสดงกิจกรรมสำหรับผู้ชมที่ใช้ภาษาฝรั่งเศส ฟิลด์จะเริ่มต้นด้วยการคัดลอกข้อมูลต้นฉบับ หลังจากนั้น แต่ละภาษาจะเก็บค่าของตัวเองไว้ คุณสามารถแก้ไขแต่ละภาษาในตัวแก้ไข WordPress ได้โดย: เปิดโพสต์ คลิกไอคอนเครื่องหมายบวกสำหรับภาษาปลายทางในกล่อง ภาษา กรอกค่าสำหรับภาษานั้น แล้วเผยแพร่ WPML จะไม่ซิงค์เวอร์ชันภาษาหลังจากนั้น และการแปลอัตโนมัติจะไม่มีผล
ผู้เชี่ยวชาญ
ใช้ตัวเลือกนี้เมื่อคุณต้องการผสมผสาน: บางฟิลด์แปล บางฟิลด์คงเดิม และบางฟิลด์คัดลอกครั้งเดียวแล้วจึงเปลี่ยนในแต่ละภาษา เลือก Expert และตั้งค่าการแปลของแต่ละฟิลด์ด้วยตนเอง ในตัวอย่าง กิจกรรม ชื่อและคำอธิบายจะใช้ แปล ส่วนราคา วันที่ และที่อยู่จะใช้ คัดลอก ACFML ไม่แนะนำตัวเลือกนี้สำหรับกลุ่มฟิลด์ใหม่ กลุ่มฟิลด์ที่กำหนดใน PHP หรือ Local JSON อาจไม่มีตัวเลือกการแปล ในกรณีนี้ระบบจะใช้ Expert เฉพาะเมื่อกลุ่มฟิลด์นั้นมีอยู่ก่อนที่เว็บไซต์ของคุณจะอัปเดตเป็น WPML 5.2
การตั้งค่าการแปลสำหรับฟิลด์ ACF แต่ละประเภท
ทุกฟิลด์ที่จัดเก็บค่าจะมีการตั้งค่าการแปลหนึ่งในสี่แบบ:
- แปล ผู้เยี่ยมชมจะเห็นค่าในภาษาของตนเอง WPML จะเติมคำแปลลงไป คุณสามารถแก้ไขได้ในตัวแก้ไขการแปล
- คัดลอก ผู้เยี่ยมชมในทุกภาษาจะเห็นสิ่งที่ต้นฉบับแสดงอย่างชัดเจน ฟิลด์นี้จะถูกล็อกในภาษาอื่น ๆ
- คัดลอกครั้งเดียว ค่าจะเริ่มต้นด้วยการคัดลอกข้อมูลต้นฉบับ หลังจากนั้น คุณจะต้องแก้ไขในแต่ละภาษาด้วยตนเอง หากคุณล้างข้อมูลฟิลด์ในการแปล ฟิลด์นั้นจะยังคงว่างเปล่า WPML จะไม่คัดลอกค่าต้นฉบับลงไปอีก
- ไม่แปล การแปลจะเริ่มต้นโดยไม่มีค่านี้ คุณสามารถกรอกข้อมูลในแต่ละภาษาด้วยตนเอง
เมื่อคุณเลือก Same content in every language, translated หรือ Each language has its own content ACFML จะให้การตั้งค่าที่แนะนำสำหรับฟิลด์แต่ละประเภท ตารางด้านล่างแสดงการตั้งค่าที่แนะนำเหล่านี้ หากต้องการตั้งค่าที่แตกต่างกันสำหรับฟิลด์เดียว ให้ใช้ Expert หากต้องการเปลี่ยนการตั้งค่าที่แนะนำของประเภทฟิลด์ในทั้งเว็บไซต์ ให้ใช้ฟิลเตอร์ acfml_field_group_mode_field_translation_preference (ดู Developer Hooks for Edge Cases ด้านล่าง)
ฟิลด์ Tab, Accordion, Message และ Separator ไม่ได้จัดเก็บค่า ดังนั้นจึงไม่มีการตั้งค่าการแปล ประเภทฟิลด์ที่ไม่ได้อยู่ในตาราง เช่น ประเภทฟิลด์จากปลั๊กอินอื่น จะได้รับ คัดลอก ในทั้งสองตัวเลือกการแปล
ฟิลด์ Repeater, Flexible Content, Group และ Clone
ฟิลด์เหล่านี้ใช้เก็บฟิลด์อื่น ๆ การตั้งค่าที่แนะนำของฟิลด์คอนเทนเนอร์คือ คัดลอก หรือ คัดลอกครั้งเดียว ACFML ไม่มีตัวเลือก แปล สำหรับตัวฟิลด์คอนเทนเนอร์เอง แต่ละฟิลด์ย่อยจะมีการตั้งค่าการแปลของตัวเอง
เมื่อใช้ Same content in every language, translated แถวของฟิลด์ Repeater และ Flexible Content จะอยู่ในลำดับเดียวกับภาษาเริ่มต้น เมื่อใช้ Expert หรือเมื่อโพสต์ใช้กลุ่มฟิลด์ที่มีตัวเลือกต่างกัน ตัวแก้ไขโพสต์จะแสดงกล่อง ACFML Synchronise translations ซึ่งจะแสดงบนโพสต์ต้นฉบับเมื่อโพสต์นั้นมีการแปลและมีฟิลด์ Repeater หรือ Flexible Content ให้เลือก Keep repeater and flexible sub-fields in the same order as the default language เพื่อให้แถวตรงกันในทุกภาษา
ฟิลด์พื้นฐาน
| ประเภท | Same content in every language, translated | Each language has its own content |
|---|---|---|
| Text | แปล | แปล |
| Text Area | แปล | แปล |
| Number | คัดลอก | คัดลอกครั้งเดียว |
| Range | คัดลอก | คัดลอกครั้งเดียว |
| คัดลอก | คัดลอกครั้งเดียว | |
| URL | แปล | แปล |
| Password | คัดลอก | คัดลอกครั้งเดียว |
ฟิลด์เนื้อหา
| ประเภท | เนื้อหาเหมือนกันทุกภาษาและแปล | แต่ละภาษามีเนื้อหาของตัวเอง |
|---|---|---|
| Image | คัดลอก | คัดลอกครั้งเดียว |
| File | คัดลอก | คัดลอกครั้งเดียว |
| Wysiwyg Editor | แปล | แปล |
| oEmbed | คัดลอก | คัดลอกครั้งเดียว |
| Gallery | คัดลอก | คัดลอกครั้งเดียว |
ฟิลด์ตัวเลือก
| ประเภท | เนื้อหาเหมือนกันทุกภาษาและแปล | แต่ละภาษามีเนื้อหาของตัวเอง |
|---|---|---|
| Select | คัดลอก | คัดลอกครั้งเดียว |
| Checkbox | คัดลอก | คัดลอกครั้งเดียว |
| Radio Button | คัดลอก | คัดลอกครั้งเดียว |
| Button Group | คัดลอก | คัดลอกครั้งเดียว |
| True / False | คัดลอก | คัดลอกครั้งเดียว |
ฟิลด์ jQuery
| ประเภท | เนื้อหาเหมือนกันทุกภาษาและแปล | แต่ละภาษามีเนื้อหาของตัวเอง |
|---|---|---|
| Google Map | คัดลอก | คัดลอกครั้งเดียว |
| Date Picker | คัดลอก | คัดลอกครั้งเดียว |
| Date Time Picker | คัดลอก | คัดลอกครั้งเดียว |
| Time Picker | คัดลอก | คัดลอกครั้งเดียว |
| Color Picker | คัดลอก | คัดลอกครั้งเดียว |
| Icon Picker | คัดลอก | คัดลอกครั้งเดียว |
ฟิลด์เค้าโครง
| ประเภท | เนื้อหาเหมือนกันทุกภาษาและแปล | แต่ละภาษามีเนื้อหาของตัวเอง |
|---|---|---|
| Group | คัดลอก | คัดลอกครั้งเดียว |
| Repeater | คัดลอก | คัดลอกครั้งเดียว |
| Flexible Content | คัดลอก | คัดลอกครั้งเดียว |
| Clone | คัดลอก | คัดลอกครั้งเดียว |
ฟิลด์ความสัมพันธ์
| ประเภท | เนื้อหาเหมือนกันทุกภาษาและแปล | แต่ละภาษามีเนื้อหาของตัวเอง |
|---|---|---|
| Link | แปล | แปล |
| Post Object | คัดลอก | คัดลอกครั้งเดียว |
| Page Link | คัดลอก | คัดลอกครั้งเดียว |
| Relationship | คัดลอก | คัดลอกครั้งเดียว |
| Taxonomy | คัดลอก | คัดลอกครั้งเดียว |
| User | คัดลอก | คัดลอกครั้งเดียว |
สำหรับฟิลด์ Link การแปลจะครอบคลุมถึงข้อความลิงก์และ URL เมื่อ URL ชี้ไปยังหน้าบนไซต์ของคุณและคุณไม่ได้เปลี่ยนแปลง WPML จะแสดงหน้านั้นในภาษาของผู้เยี่ยมชม
ฟิลด์ URL และ Link
เริ่มตั้งแต่ ACFML 5.0 ฟิลด์ URL และ Link จะใช้การตั้งค่า แปล เป็นค่าเริ่มต้น
| ประเภท | เนื้อหาเหมือนกันทุกภาษาและแปล | แต่ละภาษามีเนื้อหาของตัวเอง |
|---|---|---|
| URL | แปล | แปล |
| Link | แปล | แปล |
ความสัมพันธ์แบบสองทิศทาง
ตั้งแต่ ACF 6.2 เป็นต้นมา ฟิลด์ Relationship, Post Object, Taxonomy และ User สามารถเป็นแบบสองทิศทางได้ เมื่อคุณเลือกเป้าหมายในฟิลด์ ACF จะเพิ่มโพสต์ของคุณไปยังฟิลด์ที่จับคู่กันของเป้าหมายนั้น ตัวอย่างเช่น หนังสือ Dune กำหนดฟิลด์ Author เป็น Frank Herbert จากนั้น ACF จะเพิ่ม Dune ลงในฟิลด์ Books ของ Frank Herbert
ACFML จะเก็บคู่ข้อมูลนี้ไว้ในแต่ละภาษา:
- เมื่อ WPML คัดลอกฟิลด์ไปยังคำแปล ACFML จะชี้ฟิลด์นั้นไปยังเป้าหมายในภาษาเดียวกัน จากนั้น ACFML จะเพิ่มคำแปลลงในฟิลด์ที่จับคู่กันของเป้าหมายนั้น Dune ในภาษาสเปนจะแสดง Frank Herbert ในภาษาสเปน และ Frank Herbert ในภาษาสเปนก็จะแสดง Dune ในภาษาสเปนเช่นกัน
- เมื่อฟิลด์ใช้คัดลอกและคุณเปลี่ยนเป้าหมายในโพสต์ต้นฉบับ WPML จะอัปเดตคำแปล จากนั้น ACFML จะเพิ่มคำแปลไปยังเป้าหมายใหม่ในภาษานั้นและลบออกจากเป้าหมายเดิม
- ACFML จะเปลี่ยนเฉพาะเป้าหมายในภาษาของคำแปลเท่านั้น โพสต์ในภาษาต้นฉบับจะยังคงเก็บคู่ข้อมูลของตัวเองไว้
- เมื่อเป้าหมายยังไม่มีคำแปล คำแปลจะชี้ไปยังเป้าหมายต้นฉบับ และ ACFML จะไม่เปลี่ยนแปลงเป้าหมายต้นฉบับนั้น เมื่อคุณแปลเป้าหมายในภายหลัง ACFML จะชี้ฟิลด์ไปยังคำแปลใหม่และเพิ่มโพสต์ลงในฟิลด์ที่จับคู่กัน ฟิลด์นี้จะแสดงเป้าหมายเพียงครั้งเดียว
- ผู้ใช้จะไม่มีคำแปล ดังนั้น ACFML จึงไม่เพิ่มคำแปลลงในฟิลด์ที่จับคู่กันของผู้ใช้ ฟิลด์นั้นจะเก็บโพสต์ต้นฉบับไว้ ในภาษาอื่น ACFML จะแสดงคำแปลของโพสต์นั้น เว้นแต่ฟิลด์จะใช้คัดลอก
วิธีนี้ใช้ได้กับการตั้งค่าคัดลอกและคัดลอกครั้งเดียวซึ่งเป็นการตั้งค่าที่แนะนำสำหรับฟิลด์ประเภทเหล่านี้ และยังใช้งานได้เมื่อคุณทำสำเนาโพสต์ด้วย WPML
การแปลบล็อก ACF
โดยค่าเริ่มต้น บล็อก ACF จะบันทึกค่าฟิลด์ไว้ภายในบล็อกในเนื้อหาของโพสต์ ไม่ใช่เป็นฟิลด์กำหนดเอง ACFML จะส่งค่าเหล่านี้ไปแปลพร้อมกับส่วนที่เหลือของโพสต์ในงานแปลเดียวกัน
- บล็อกจะใช้ตัวเลือกการแปลและการตั้งค่าฟิลด์ของ Field Group ที่มีกฎตำแหน่งที่ตั้งเป็นบล็อกนี้
- ACFML จะส่งเฉพาะฟิลด์ที่ใช้แปลเท่านั้น ฟิลด์ที่ใช้คัดลอก คัดลอกครั้งเดียว หรืออย่าแปลจะเก็บค่าจากบล็อกต้นฉบับไว้
- ฟิลด์ Repeater และ Flexible Content ภายในบล็อกก็จะถูกแปลเช่นกัน รวมถึงเมื่อซ้อนกันอยู่ด้วย ฟิลด์ย่อยแต่ละฟิลด์จะใช้การตั้งค่าการแปลของตนเอง
- บล็อกที่มี
"usePostMeta": trueในส่วนacfของblock.jsonจะบันทึกค่าเป็นฟิลด์กำหนดเองของโพสต์ ไม่ใช่ในบล็อก ค่าเหล่านี้จะแปลเหมือนกับฟิลด์กำหนดเองอื่น ๆ ของโพสต์ โดยใช้ตัวเลือกการแปลและการตั้งค่าฟิลด์ของ Field Group - เมื่อคุณเปลี่ยนการตั้งค่าการแปลใน Field Group ที่ใช้กับบล็อก WPML จะถามว่าคุณต้องการอัปเดตคำแปลที่มีอยู่หรือไม่ หากคุณยืนยัน WPML จะทำเครื่องหมายคำแปลของโพสต์เหล่านี้ว่าจำเป็นต้องอัปเดต ส่งไปแปลอีกครั้งเพื่อใช้การเปลี่ยนแปลง การเปลี่ยนเป็นอย่าแปลจะไม่ทำเครื่องหมาย
ฟิลด์ที่ประกาศใน block.json
ตั้งแต่ ACF 6.8.1 บล็อกสามารถประกาศฟิลด์ในไฟล์ block.json ของตนได้ใน acf.fields โดย ACF จะสร้าง Field Group สำหรับฟิลด์เหล่านี้ และคุณไม่สามารถแก้ไข Field Group นี้ในหน้าจัดการเว็บไซต์ได้ ACFML จะให้ตัวเลือกเนื้อหาเหมือนกันทุกภาษา แปลแล้วและการตั้งค่าที่แนะนำสำหรับฟิลด์แต่ละประเภท เหมือนกับ Field Group ที่ลงทะเบียนใน PHP
หากต้องการใช้ตัวเลือกอื่นสำหรับทั้งกลุ่ม ให้เพิ่ม acfml_field_group_mode ลงในส่วน acf ของ block.json หรือลงใน acf_register_block_type() ค่าที่ยอมรับได้คือ translation (เนื้อหาเหมือนกันทุกภาษา แปลแล้ว) localization (แต่ละภาษามีเนื้อหาของตัวเอง) และ advanced (ผู้เชี่ยวชาญ) ACFML จะละเว้นค่าอื่น ๆ
{
"name": "acme/event-card",
"title": "Event Card",
"acf": {
"mode": "preview",
"acfml_field_group_mode": "localization",
"fields": [ ... ]
}
}
หากต้องการกำหนดการตั้งค่าของฟิลด์เดียว ให้เพิ่ม wpml_cf_preferences ลงในฟิลด์นั้น ACFML จะเก็บการตั้งค่านี้ไว้กับทุกตัวเลือก สำหรับผู้เชี่ยวชาญจะมีเพียงฟิลด์ที่ประกาศ wpml_cf_preferences เท่านั้นที่จะได้รับการตั้งค่า
เมื่อ block.json ไม่ได้ระบุชื่อตัวเลือก ACFML จะจัดเก็บตัวเลือกที่กำหนดให้กับกลุ่มในครั้งแรกที่พบกลุ่มนั้น และจะเก็บไว้หลังจากนั้น ในเว็บไซต์ที่ใช้บล็อกเหล่านี้กับ ACFML เวอร์ชันเก่า ตัวเลือกที่จัดเก็บไว้คือผู้เชี่ยวชาญ
การตั้งค่ากำหนดสำหรับฟิลด์ที่ลงทะเบียนใน PHP หรือ JSON
กลุ่มฟิลด์ ACF ที่ลงทะเบียนใน PHP (ด้วย acf_add_local_field_group()) หรือผ่านฟีเจอร์ Local JSON ของ ACF จะไม่ใช้การตั้งค่ากำหนดการแปลจากหน้าจัดการเว็บไซต์ เนื่องจากหน้าจัดการเว็บไซต์ไม่ได้จัดการสิ่งเหล่านี้ ให้ตั้งค่ากำหนดในตำแหน่งเดียวกับที่คุณลงทะเบียนฟิลด์
หากต้องการตั้งค่าตัวเลือกการแปลของกลุ่มฟิลด์ ให้เพิ่มคีย์ acfml_field_group_mode ลงในคำจำกัดความ โดยใช้ translation, localization หรือ advanced (Expert) เมื่อคำจำกัดความไม่ได้ตั้งค่าตัวเลือกการแปล ACFML จะกำหนดตัวเลือก เนื้อหาเดียวกันในทุกภาษา พร้อมแปล ให้กับกลุ่มฟิลด์ในครั้งแรกที่พบกลุ่มดังกล่าว ACFML จะจัดเก็บตัวเลือกนี้และเก็บไว้หลังจากนั้น กลุ่มฟิลด์ที่มีอยู่ก่อนที่เว็บไซต์ของคุณจะอัปเดตเป็น WPML 5.2 จะยังคงใช้ ผู้เชี่ยวชาญ
สำหรับแต่ละฟิลด์ในคำจำกัดความของกลุ่มฟิลด์ ให้เพิ่มคีย์ wpml_cf_preferences ค่านี้จะเป็นจำนวนเต็มที่จับคู่กับการตั้งค่ากำหนดการแปลสี่แบบ ได้แก่ 0 สำหรับ ไม่แปล (WPML จะละเว้นฟิลด์นี้) 1 สำหรับ คัดลอก (ค่าจะซิงค์ตรงกันในทุกภาษา) 2 สำหรับ แปล (ค่าจะผ่านกระบวนการแปล) และ 3 สำหรับ คัดลอกครั้งเดียว (ค่าจะถูกคัดลอกไปยังคำแปลใหม่ จากนั้นแต่ละภาษาจะสามารถแก้ไขได้อย่างอิสระ)
ตัวอย่างแบบย่อ:
acf_add_local_field_group( [
'key' => 'group_1',
'title' => 'My Group',
'fields' => [
[
'key' => 'field_1',
'label' => 'Sub Title',
'name' => 'sub_title',
'type' => 'text',
'wpml_cf_preferences' => 2, // Translate.
],
],
// ...rest of the field-group config
] );
หลังจากที่คุณกำหนดฟิลด์ในโค้ดแล้ว ให้ซิงค์การตั้งค่ากำหนดลงใน WPML เพื่อให้หน้าจัดการเว็บไซต์จดจำได้:
- ไปที่ ACFเครื่องมือ
- เลื่อนไปที่ Translate ACF Local JSON and PHP-Registered Fields
- ใน Sync Translation Preferences for Local Fields ให้เลือก Sync once now แล้วคลิก ใช้
WPML จะอ่านการตั้งค่ากำหนดจากคำจำกัดความของฟิลด์ของคุณและจัดเก็บไว้ Sync once now จะทำงานเพียงครั้งเดียว หากคุณเปลี่ยนคำจำกัดความบ่อยครั้ง ให้เลือก Sync on every request (may affect performance) แทน ตัวเลือกนี้จะเรียกใช้การซิงค์ในทุกคำขอของหน้าจัดการเว็บไซต์
หากคุณใช้ฟีเจอร์ Local JSON ของ ACF เพื่อแชร์กลุ่มฟิลด์ระหว่างเว็บไซต์ ACFML จะเขียนการตั้งค่ากำหนดการแปลลงในไฟล์ JSON โดยอัตโนมัติ ส่งออกไฟล์ JSON จากเว็บไซต์หนึ่ง นำเข้าในอีกเว็บไซต์หนึ่ง และเว็บไซต์ปลายทางจะรับการตั้งค่ากำหนดไปใช้เมื่อ ACFML ทำงานอยู่ทั้งสองฝั่ง
กลุ่มฟิลด์ที่ ACF สร้างด้วยคำสั่ง WP-CLI wp acf json import หรือผ่าน Abilities API สำหรับเครื่องมือ AI จะถูกจัดเก็บไว้ในฐานข้อมูล ACFML จะกำหนดตัวเลือก เนื้อหาเดียวกันในทุกภาษา พร้อมแปล และการตั้งค่ากำหนดที่แนะนำสำหรับแต่ละประเภทฟิลด์ให้กับกลุ่มฟิลด์เหล่านี้ เมื่อ JSON ที่นำเข้ามีคีย์ acfml_field_group_mode อยู่แล้ว ACFML จะใช้ตัวเลือกนั้นแทน
กลุ่มฟิลด์ในไฟล์ Local JSON
ACF จะโหลดกลุ่มฟิลด์ของโฟลเดอร์ acf-json ตั้งแต่ช่วงแรกของแต่ละคำขอ เริ่มตั้งแต่ WPML 5.2 เป็นต้นไป ACFML จะอ่านกลุ่มฟิลด์เหล่านี้ในเวลาเดียวกัน ดังนั้นเมื่อคุณซิงค์การตั้งค่ากำหนดการแปล การซิงค์จะครอบคลุมกลุ่มฟิลด์ JSON ด้วย จากนั้น WPML จะใช้การตั้งค่ากำหนดในไฟล์ JSON
ในไฟล์ JSON ให้เพิ่ม wpml_cf_preferences ลงในแต่ละฟิลด์ โดยใช้ค่าเดียวกับใน PHP คีย์นี้จะตั้งค่ากำหนดของแต่ละฟิลด์ ไม่ว่าตัวเลือกการแปลของกลุ่มฟิลด์จะเป็นอะไรก็ตาม ตัวอย่างนี้ใช้ ผู้เชี่ยวชาญ:
{
"key": "group_event",
"title": "Event",
"acfml_field_group_mode": "advanced",
"fields": [
{
"key": "field_event_title",
"label": "Event Title",
"name": "event_title",
"type": "text",
"wpml_cf_preferences": 2
},
{
"key": "field_event_price",
"label": "Price",
"name": "event_price",
"type": "number",
"wpml_cf_preferences": 1
}
]
}
หากต้องการส่งการตั้งค่ากำหนดและป้ายกำกับของกลุ่มฟิลด์ JSON ไปยัง WPML:
- ไปที่ ACFเครื่องมือ
- เลื่อนไปที่ Translate ACF Local JSON and PHP-Registered Fields
- ใน Sync Translation Preferences for Local Fields ให้เลือก Sync once now หรือ Sync on every request (may affect performance)
- ใน Register Labels for Translation ให้เลือก Register labels now
- คลิก ใช้
หากต้องการตรวจสอบผลลัพธ์ ให้ไปที่ WPMLการตั้งค่า และค้นหาฟิลด์ใน การแปลฟิลด์ที่กำหนดเอง แต่ละฟิลด์จะแสดงการตั้งค่ากำหนดจากไฟล์ JSON นอกจากนี้ ACFML ยังลงทะเบียนป้ายกำกับของกลุ่มฟิลด์ ประเภทโพสต์ อนุกรมวิธาน และหน้า Options ที่มีอยู่เฉพาะในโค้ด: ในโฟลเดอร์ acf-json หรือที่ลงทะเบียนใน PHP ให้แปลสิ่งเหล่านี้เหมือนกับป้ายกำกับของกลุ่มฟิลด์อื่น ๆ (ดู การแปลป้ายกำกับฟิลด์ ACF ด้านล่าง)
การแปลป้ายกำกับฟิลด์ ACF
ป้ายกำกับฟิลด์ ACF คือชื่อที่ระบุฟิลด์กำหนดเองแต่ละฟิลด์ในตัวแก้ไข WordPress และบนส่วนหน้าเว็บไซต์ (เช่น Phone number, Address) ป้ายกำกับเหล่านี้จะแปลแยกต่างหากจากค่าของฟิลด์ และจะอยู่ใน WPML การแปลสตริง ไม่ใช่อยู่ในงานแปลของโพสต์
หากต้องการส่งป้ายกำกับฟิลด์ไปแปล:
- เปิด WPMLการแปลแดชบอร์ด
- ขยายส่วน ACF Field Group
- เลือกรายการ Field Group Labels สำหรับกลุ่มฟิลด์ที่คุณต้องการแปล
- เลือกวิธีการแปล (PTC, นักแปลของคุณ หรือ แปลด้วยตัวเอง) แล้วส่ง
ป้ายกำกับที่แปลแล้วจะปรากฏบนส่วนหน้าเว็บไซต์โดยอัตโนมัติเมื่อการแปลเสร็จสมบูรณ์
การหยุดแปลป้ายกำกับฟิลด์
ตามค่าเริ่มต้น งานแปลของโพสต์จะไม่รวมป้ายกำกับฟิลด์ คุณจะแปลป้ายกำกับเหล่านี้ได้ก็ต่อเมื่อส่งรายการ Field Group Labels จากแดชบอร์ด หากคุณไม่ส่งรายการดังกล่าว ACF จะแสดงป้ายกำกับต้นฉบับ หากต้องการแสดงป้ายกำกับต้นฉบับแม้ว่าจะมีคำแปลอยู่แล้ว ให้ใช้ฟิลเตอร์ acfml_should_translate_acf_entity และส่งคืนค่า false สำหรับฟิลด์หรือ Field Group ที่คุณต้องการข้าม ข้อมูลอ้างอิงฮุกและค่าคงที่ของ ACFML มีตัวอย่างให้ดู
การแปลตัวเลือกฟิลด์ของ ACF
ฟิลด์ประเภทตัวเลือก (Select, Checkbox, Radio Button, Button Group) จะมีป้ายกำกับตัวเลือกของตัวเอง (เช่น Small / Medium / Large) ป้ายกำกับเหล่านี้จะอยู่ร่วมกับป้ายกำกับฟิลด์แทนที่จะอยู่ภายในการแปลโพสต์ ให้ส่งรายการเหล่านี้ด้วยวิธีเดียวกัน:
- เปิด WPMLการแปลแดชบอร์ด
- ขยายส่วน ACF Field Group
- เลือก Field Group ที่คุณต้องการแปลค่าตัวเลือก
- เลือกวิธีการแปลแล้วส่ง
การแปลหน้า Options ของ ACF
หน้า Options ของ ACF (หน้าจอการตั้งค่าส่วนกลาง เช่น Contact details, Header settings, Footer links) จะได้รับการแปลเป็นประเภทออบเจกต์ของตัวเอง ซึ่งแยกต่างหากจากโพสต์:
- เปิด WPMLการแปลแดชบอร์ด
- ขยายส่วน ACF Options
- เลือกหน้า Options ที่คุณต้องการแปล
- เลือกวิธีการแปลแล้วส่ง
ค่าในหน้า Options ของแต่ละภาษาจะปรากฏขึ้นโดยอัตโนมัติเมื่อ ACF อ่านตัวเลือกในบริบทของภาษานั้น ๆ
ตัวเลือกการแปลของ Field Group ในหน้า Options จะเป็นตัวกำหนดสิ่งที่จะเกิดขึ้นกับแต่ละฟิลด์:
- ฟิลด์ที่ใช้ แปล จะเข้าไปอยู่ในรายการ ACF Options ที่คุณส่งจากแดชบอร์ดการแปล เมื่อการแปลเสร็จสมบูรณ์ ACFML จะเขียนค่าลงในหน้า Options ของภาษานั้น ฟิลด์ Repeater และ Flexible Content จะได้แถวที่เหมือนกับต้นฉบับ
- ฟิลด์ที่ใช้ คัดลอก จะได้รับค่าของต้นฉบับในทุกภาษา เมื่อคุณบันทึกต้นฉบับ ACFML จะอัปเดตภาษาอื่น ๆ
- ฟิลด์ที่ใช้ คัดลอกครั้งเดียว จะเริ่มต้นจากการเป็นสำเนาของต้นฉบับ หลังจากนั้น คุณสามารถแก้ไขได้ในหน้า Options ของแต่ละภาษา
ใช้ Each language has its own content เมื่อตัวเลือกแตกต่างกันไปตามภาษา ตัวอย่างเช่น หน้า Options แสดงรายชื่อตัวแทนฝ่ายขายสามคนในภาษาอังกฤษและสองคนในภาษาสเปน หากต้องการเลือกตัวเลือกนี้ ให้แก้ไข Field Group เช่นเดียวกับ Field Group อื่น ๆ
หากต้องการเปลี่ยนแปลงคำแปลที่เสร็จสิ้นแล้ว ให้ไปที่ WPMLการแปลงานแปล แล้วคลิก แก้ไข ที่งาน ACF Options คุณยังสามารถแก้ไขค่าที่แปลแล้วได้ใน WPMLการแปลสตริง เมื่อคุณบันทึกคำแปลที่นั่น ACFML จะเขียนค่านั้นลงในหน้า Options ของภาษานั้น
เมื่อคุณเปลี่ยนภาษาเริ่มต้นของไซต์ ค่าในหน้า Options ที่มีอยู่จะยังคงอยู่ในภาษาที่คุณเขียนไว้ ACF จะอ่านค่าเดียวกันกับก่อนที่จะมีการเปลี่ยนแปลง
ในโค้ด get_field( 'my_field', 'option' ) จะส่งคืนค่าของภาษาปัจจุบัน หลังจาก do_action( 'wpml_switch_language', 'fr' ) โค้ดจะส่งคืนค่าของภาษาฝรั่งเศส วิธีนี้ยังใช้ได้กับหน้า Options ที่มี post_id แบบกำหนดเองด้วย
ข้อผิดพลาดที่พบบ่อย
- ป้ายกำกับฟิลด์ดูเหมือนยังไม่ได้รับการแปล ป้ายกำกับเหล่านี้อยู่ใน การแปลสตริง ไม่ใช่ในการแปลโพสต์ ให้ส่งรายการ Field Group Labels ของ Field Group จากแดชบอร์ด (ดู การแปลป้ายกำกับฟิลด์ของ ACF ด้านบน)
- ค่าตัวเลือกดูเหมือนยังไม่ได้รับการแปล เป็นลักษณะเดียวกัน ให้ส่ง Field Group จากส่วน ACF Field Group ของแดชบอร์ด เพื่อให้รวมค่าตัวเลือกเหล่านั้นเข้าไปด้วย
- แถวของ Repeater ไม่ซิงค์กัน Field Group อาจใช้ Expert อยู่ ให้แก้ไขโพสต์ต้นฉบับ เลือก Keep repeater and flexible sub-fields in the same order as the default language ในกล่อง ACFML Synchronise translations แล้วอัปเดตโพสต์ หรือสลับ Field Group ไปเป็น Same content in every language, translated
- ตรรกะแบบมีเงื่อนไขทำงานผิดปกติ เมื่อฟิลด์ควบคุมถูกตั้งค่าเป็น คัดลอก หรือ ไม่ต้องแปล พฤติกรรมของเงื่อนไขจะยึดตามค่าของภาษาต้นทางในทุกคำแปล ให้ตั้งค่าฟิลด์ควบคุมเป็น แปล หากค่าดังกล่าวควรแตกต่างกันไปในแต่ละภาษา
- ฟิลด์แบบโลคัล (ที่ลงทะเบียนด้วย PHP) ละเว้นการตั้งค่าการแปลที่กำหนดไว้ในหน้าจัดการเว็บไซต์ ให้ตั้งค่าคีย์
wpml_cf_preferencesในคำจำกัดความของ Field Group เอง และซิงค์จาก ACFเครื่องมือ ขั้นตอนจะอยู่ใน การตั้งค่าสำหรับฟิลด์ที่ลงทะเบียนใน PHP หรือ JSON ด้านบน
ฮุกสำหรับนักพัฒนาในกรณีพิเศษ
สำหรับการควบคุมผ่านโปรแกรม (เช่น การยกเว้นฟิลด์เฉพาะจากการแปล การแทนที่การตั้งค่าเริ่มต้นสำหรับประเภทฟิลด์ทั่วทั้งไซต์ การซ่อนคำอธิบายประกอบจากนักแปล หรือการยกเว้นสตริงของ Field Group ออกจากงานแปลโพสต์) ACFML มีฟิลเตอร์สองตัวและค่าคงที่สี่ตัว ข้อมูลอ้างอิงฉบับเต็มพร้อมตัวอย่างโค้ดอยู่ที่ ข้อมูลอ้างอิงฮุกและค่าคงที่ของ ACFML