Skip Navigation

ธีมจำนวนมากแสดงโพสต์ เพจ และหมวดหมู่พิเศษโดยเฉพาะ ซึ่งมักจะอิงตามรหัส ตัวอย่างเช่น ส่วนโพสต์ “แนะนำ” ในหน้าแรก หรือหมวดหมู่ที่ไฮไลต์

ในบางกรณี 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 สำหรับการทำงานหลายภาษา

สิ่งนี้จะปรับ 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 )

หมายเหตุ: สำหรับเวอร์ชัน WPML> =3.2 โปรดใช้ตะขอตัวกรอง wpml_object_id ตั้งแต่ WPML 3.3 ฟังก์ชัน icl_object_id ได้รับการแท็กว่าเลิกใช้แล้ว และถูกลบออกอย่างสมบูรณ์ใน 3.3

ตัวอย่างการใช้งาน

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 ช่วยให้สามารถผสมองค์ประกอบของหน้าในภาษาต่างๆ ได้

ตัวอย่างเช่น หากคุณมีแกลเลอรีรูปภาพและไม่ต้องการทำซ้ำรูปภาพตามภาษา ให้ทำตามขั้นตอนต่อไปนี้:

  1. รับรหัสของเพจในภาษาที่มีแกลเลอรีอยู่
  2. วนซ้ำรูปภาพสำหรับหน้านั้นแล้วแสดง