เมื่อคุณลงทะเบียนประเภทโพสต์แบบกำหนดเองด้วยตนเอง WordPress จะอนุญาตให้คุณตั้งค่าสลักของที่เก็บถาวรที่แตกต่างกันได้ วิธีที่คุณกำหนดค่าส่วนนี้จะเป็นตัวกำหนดว่าสลักจะได้รับการแปลเป็นภาษารองของคุณหรือไม่
เมื่อลงทะเบียนประเภทโพสต์แบบกำหนดเองด้วยตนเอง คุณสามารถตั้งค่าสลักของที่เก็บถาวรที่แตกต่างกันได้โดยใช้ฟังก์ชัน has_archive
WPML อนุญาตให้ตั้งค่า has_archive เป็นสตริงข้อความได้ อย่างไรก็ตาม หากค่าสตริงถูกตั้งเป็นอย่างอื่นที่ไม่ใช่ rewrite['slug'], หรือไม่ได้ตั้งค่าสลักชื่อประเภทโพสต์แบบกำหนดเอง สลักของที่เก็บถาวรจะไม่สามารถแปลได้
การตั้งค่าสลักที่แปลได้
ในตัวอย่างโค้ดนี้ เราได้ตั้งค่า
'has_archive' => true สมมติว่าสลัก book ได้รับการแปลเป็น libro ในภาษาสเปน ลิงก์ที่เก็บถาวรจะเป็นดังต่อไปนี้:
- ภาษาอังกฤษ (ภาษาเริ่มต้น): http://mydomain.tld/book/
- ภาษาสเปน (ภาษารอง): http://mydomain.tld/es/libro/
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'book',
array(
'labels' => array(
'name' => __( 'Books', 'textdomain' ),
'singular_name' => __( 'Book', 'textdomain' )
),
'public' => true,
'has_archive' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'book'),
'supports' => array('title','editor', 'custom-fields','thumbnail')
)
);
}
การตั้งค่าสลักเดียวกันในภาษาเริ่มต้นและภาษารอง
ในตัวอย่างโค้ดนี้ เราได้ตั้งค่าสตริงเฉพาะสำหรับพารามิเตอร์'has_archive' => 'my-books' ตอนนี้ลิงก์ที่เก็บถาวรจะเป็นดังต่อไปนี้:
- ภาษาอังกฤษ (ภาษาเริ่มต้น): http://mydomain.tld/my-books/
- ภาษาสเปน (ภาษารอง): http://mydomain.tld/es/my-books/
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'book',
array(
'labels' => array(
'name' => __( 'Books', 'textdomain' ),
'singular_name' => __( 'Book', 'textdomain' )
),
'public' => true,
'has_archive' => 'my-books', // Do not use the gettext functions for this parameter
'publicly_queryable' => true,
'exclude_from_search' => false,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'book'),
'supports' => array('title','editor', 'custom-fields','thumbnail')
)
);
}
การแก้ปัญหาสลักที่ปรับแต่งได้
ธีมและปลั๊กอินบางตัวอนุญาตให้ผู้ดูแลเว็บไซต์ตั้งค่าสลักแบบกำหนดเองสำหรับประเภทโพสต์แบบกำหนดเองและอนุกรมวิธานแบบกำหนดเองของตนได้
หากสลักแบบกำหนดเองที่แปลแล้วของคุณส่งคืนข้อผิดพลาด 404 โปรดตรวจสอบสิ่งต่อไปนี้:
- ประเภทแบบกำหนดเองควรได้รับการลงทะเบียนด้วยสลักเดียวกันเสมอในทุกคำขอ: ต่อภาษา ส่วนหน้า ส่วนหลัง AJAX heartbeat ฯลฯ ดังนั้นใน
'rewrite' => [ 'slug' => $my_custom_slug ],ค่าของ$my_custom_slugไม่ควรเปลี่ยนแปลงจากคำขอหนึ่งไปยังอีกคำขอหนึ่ง แม้ว่าจะมาจากตัวเลือก (หรือการตั้งค่าแบบกำหนดเองใด ๆ) ก็ตาม - WPML รองรับเฉพาะการแปลสลักแบบกำหนดเอง (เมื่อลงทะเบียนประเภทแบบกำหนดเอง) แต่ไม่รองรับโครงสร้างลิงก์ถาวรแบบกำหนดเอง
- หากสลักแบบกำหนดเองถูกจัดเก็บเป็นตัวเลือก ก็ไม่ควรลงทะเบียนเป็น
admin-textsในไฟล์wpml-config.xml - หลังจากอัปเดตค่าของสลักแบบกำหนดเองแล้ว ธีม/ปลั๊กอินควรล้างกฎการเขียนใหม่ด้วย (โดยการเรียกใช้
flush_rewrite_rules();)