ธีมจำนวนมากแสดงโพสต์ เพจ และหมวดหมู่พิเศษโดยเฉพาะ ซึ่งมักจะอิงตามรหัส ตัวอย่างเช่น ส่วนโพสต์ “แนะนำ” ในหน้าแรก หรือหมวดหมู่ที่ไฮไลต์
ในบางกรณี ID เหล่านี้จะถูกฮาร์ดโค้ดลงใน PHP ของธีม และในกรณีอื่นๆ ผู้ใช้จะเลือกรหัสเหล่านี้ในหน้าจอการตั้งค่าของธีม
เพื่อให้แสดงได้อย่างถูกต้อง ธีมจะต้องเลือกรหัสตามภาษา ใน WPML รหัสสำหรับโพสต์ เพจ หมวดหมู่ และแท็กจะเปลี่ยนเมื่อภาษาเปลี่ยนแปลง ดังนั้นธีมจึงจำเป็นต้องใช้รหัสที่ถูกต้องของภาษาที่ใช้งานอยู่
WPML มีสองตัวเลือกในการบรรลุเป้าหมายนี้
คุณสามารถเปิดใช้งาน การปรับ ID อัตโนมัติ หรือใช้ wpml_object_id ด้วยตนเองในธีมของคุณ
ตัวเลือกใดที่จะใช้?
การปรับรหัสอัตโนมัติไม่จำเป็นต้องเปลี่ยนแปลงรหัสของคุณ คุณสามารถใช้มันกับธีมใดก็ได้และทุกอย่าง “ใช้งานได้” ข้อเสียในการใช้งานคือเพิ่มเวลาในการประมวลผลและการเข้าถึง DB เล็กน้อย เนื่องจาก WPML จะเชื่อมต่อกับฟังก์ชันต่างๆ มากมาย และตรวจสอบว่าเอาต์พุตถูกต้องสำหรับภาษาที่ใช้งานอยู่
การปรับ ID ด้วยตนเองโดยใช้ฟังก์ชัน wpml_object_id จะให้ผลลัพธ์เดียวกันและมีประสิทธิภาพมากขึ้นในแง่ของการประมวลผล อย่างไรก็ตาม จำเป็นต้องมีการเข้ารหัสที่สำคัญในธีม
หากคุณกำลังสร้างธีมตั้งแต่เริ่มต้น คุณควรพิจารณาใช้ wpml_object_id เพื่อสร้างด้วยตนเอง หากคุณเริ่มต้นด้วยธีมที่มีอยู่ การแฮ็กและแก้ไขธีมอาจไม่สามารถทำได้จริง และการปรับ ID อัตโนมัติน่าจะเป็นทางออก
ไม่ว่าในกรณีใด โดยใช้ปลั๊กอินแคช ผลกระทบต่อประสิทธิภาพของการดำเนินการนี้จะลดลงจนไม่มีเลย แนะนำให้ใช้แคชเสมอสำหรับไซต์ทุกขนาด WPML ทำงานได้ดีกับ WP Super Cache และ W3 Total Cache (ซึ่งเราใช้บนเว็บไซต์ต่างๆ เช่นกัน)
1) ปรับ ID โดยอัตโนมัติ
WPML สามารถเชื่อมต่อกับฟังก์ชัน WordPress API ตรวจจับเมื่อมีการโหลดรายการเฉพาะและปรับ ID เพื่อให้ผลลัพธ์ได้รับการปรับตามภาษาที่ใช้งานอยู่
ฟังก์ชั่นนี้เปิดใช้งานตามค่าเริ่มต้นและสามารถเข้าถึงได้ผ่าน WPML → ภาษา :
สิ่งนี้จะปรับ ID ทั้งหมดโดยอัตโนมัติและสามารถใช้ได้ในธีม WordPress ใด ๆ ที่ใช้ API อย่างถูกต้อง (เกือบทุกธีมที่คุณสามารถหาได้)
2) ด้วยตนเองโดยใช้ฟังก์ชัน wpml_object_id
อีกทางหนึ่ง หากปิดการปรับ ID อัตโนมัติ คุณสามารถใช้ฟังก์ชัน wpml_object_id เพื่อให้ได้ค่าเดียวกันด้วยตนเอง
Apply_filters( ‘wpml_object_id’, int $element_id, สตริง $element_type, บูล $return_Original_if_missing, ผสม $u language_code )
ตัวอย่างการใช้งาน
echo apply_filters( 'wpml_object_id', 4, 'category', TRUE );
ส่งกลับรหัสหมวดหมู่ในภาษาปัจจุบันสำหรับรหัสหมวดหมู่ 4 หากการแปลหายไปก็จะส่งคืนต้นฉบับ (ที่นี่: รหัสหมวดหมู่ 4)
โปรดตรวจสอบ หน้า API ของเราเพื่อดูตัวอย่างอื่นๆ และค้นหาข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับการใช้งาน
การแปลอาร์เรย์ของ ID
หลายครั้งที่คุณต้องแปลงอาร์เรย์ทั้งหมดของ ID ออบเจ็กต์ (โดยทั่วไปคือ ID หมวดหมู่) เมื่อต้องการทำเช่นนี้ คุณสามารถใช้ฟังก์ชันต่อไปนี้:
function lang_object_ids($object_id, $type) { if( is_array( $object_id ) ){ $translated_object_ids = array(); foreach ( $object_id as $id ) { $translated_object_ids[] = apply_filters( 'wpml_object_id', $id, $type, true, $current_language ); } return $translated_object_ids; } else { return apply_filters( 'wpml_object_id', $object_id, $type, true, $current_language ); } }
ฟังก์ชั่นนี้ยังยอมรับประเภทวัตถุเป็นอาร์กิวเมนต์
ตัวอย่างเช่น หากต้องการรับอาร์เรย์ ID หมวดหมู่สำหรับหมวดหมู่ 1,3 และ 6 เราจะเรียก:
lang_object_ids(array(1,3,6),'category')
การแสดงองค์ประกอบของหน้าในภาษาต่างๆ
พารามิเตอร์ทางเลือก u language_code ช่วยให้สามารถผสมองค์ประกอบของหน้าในภาษาต่างๆ ได้
ตัวอย่างเช่น หากคุณมีแกลเลอรีรูปภาพและไม่ต้องการทำซ้ำรูปภาพตามภาษา ให้ทำตามขั้นตอนต่อไปนี้:
- รับรหัสของเพจในภาษาที่มีแกลเลอรีอยู่
- วนซ้ำรูปภาพสำหรับหน้านั้นแล้วแสดง