ทำตามคำแนะนำทีละขั้นตอนของเราเพื่อทำให้ปลั๊กอินและธีมของคุณเข้ากันได้กับ WPML
คำแนะนำนี้มีไว้สำหรับผู้พัฒนาธีมและปลั๊กอินที่ได้เข้าร่วมโปรแกรมความเข้ากันได้ของเราแล้ว ซึ่งก็คือ Go Global หากคุณยังไม่ได้เข้าร่วม โปรดส่งใบสมัครของคุณก่อนที่จะทำตามคำแนะนำนี้
วิธีทำให้เข้ากันได้กับ WPML
1. สร้างไฟล์การกำหนดค่าภาษา
ไฟล์การกำหนดค่าภาษาจะบอก WPML ว่าข้อความใดที่ต้องแปล (และข้อความใดที่ไม่ต้องแปล) ในปลั๊กอินหรือธีมของคุณ ซึ่งรวมถึงข้อความในประเภทโพสต์แบบกำหนดเอง อนุกรมวิธาน ฟิลด์ หน้าจอผู้ดูแลระบบ วิดเจ็ต และอื่น ๆ
หากคุณทราบวิธีสร้างไฟล์การกำหนดค่าภาษาแล้ว ให้ทำตามคำแนะนำด้านล่างเพื่อทดสอบการตั้งค่าของคุณ มิฉะนั้น โปรดดูคู่มือการกำหนดค่าภาษาของเราเพื่อเรียนรู้วิธีสร้างไฟล์ดังกล่าว
ทดสอบการตั้งค่า
1. สร้างโพสต์และอนุกรมวิธานสองสามรายการ
2. ส่งรายการเหล่านั้นเพื่อรับการแปล
3. ตรวจสอบว่ารายการเหล่านั้นปรากฏเป็นภาษาที่แปลแล้วบนส่วนหน้าเว็บไซต์
2. เตรียมสตริงสำหรับการแปล
สตริงคือข้อความใด ๆ ที่ปรากฏบนเว็บไซต์และไม่ได้เป็นส่วนหนึ่งของโพสต์ หน้า หรืออนุกรมวิธาน หากต้องการให้ WPML แปลสตริงในปลั๊กอินหรือธีมของคุณ ให้ทำตามคำแนะนำด้านล่างสำหรับแต่ละกรณีการใช้งาน
ในขณะที่คุณกำหนดค่าสตริงของคุณ ให้ใช้ปลั๊กอิน Multilingual Tools เพื่อตรวจสอบว่าสตริงใดสามารถแปลได้ และสตริงใดจำเป็นต้องมีการกำหนดค่าเพิ่มเติม
สตริงที่ฮาร์ดโค้ดไว้
สตริงที่ฮาร์ดโค้ดไว้จำเป็นต้องได้รับการลงทะเบียนด้วยฟังก์ชัน gettext เรียนรู้เพิ่มเติมเกี่ยวกับการใช้ gettext และการเตรียมโค้ดของคุณ
สตริงใน wp_options
หากปลั๊กอินหรือธีมของคุณใช้สตริงจากตาราง wp_options ให้ลงทะเบียนสตริงเหล่านั้นในไฟล์ wpml-config.xml
หากคีย์ตัวเลือกของคุณไม่คงที่ และธีมของคุณใช้อาร์เรย์ของรายการที่อาจเพิ่มขึ้นตามข้อมูลที่ผู้ใช้ป้อน ให้ลงทะเบียนรายการเหล่านี้แบบไดนามิก คุณสามารถใช้ฟังก์ชัน API ของ WPML เพื่อดำเนินการนี้ได้
สตริงแบบไดนามิก
หากวิธีการก่อนหน้านี้ไม่สามารถใช้กับสตริงของคุณได้ ให้ทำตามคำแนะนำเหล่านี้เพื่อเตรียมสตริงสำหรับการแปล:
- การทำให้ข้อความที่ผู้ใช้ป้อนสามารถแปลได้
- การทำให้เนื้อหาในตารางฐานข้อมูลที่กำหนดเองสามารถแปลได้
- การจัดกลุ่มข้อความลงในแพ็คเกจสตริงเพื่อการแปลที่รวดเร็วยิ่งขึ้น
ทดสอบการตั้งค่า
1. สแกนปลั๊กอิน / ธีมของคุณเพื่อค้นหาสตริงใน WPMLการแปลธีมและปลั๊กอิน
2. สร้างหน้าที่มีสตริง
3. ตรวจสอบว่าสตริงปรากฏในการแปลสตริงหรือไม่
4. แปลสตริงสองสามรายการและตรวจสอบว่าปรากฏเป็นภาษาที่แปลแล้วบนส่วนหน้าเว็บไซต์
3. ลงทะเบียนวิดเจ็ตและบล็อกที่กำหนดเองสำหรับการแปล
หากธีมหรือปลั๊กอินของคุณมีวิดเจ็ตที่กำหนดเองสำหรับปลั๊กอินสร้างหน้าเว็บ เช่น Elementor คุณจะต้องลงทะเบียนวิดเจ็ตเหล่านั้นสำหรับการแปล
ดูคำแนะนำต่อไปนี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการลงทะเบียนเนื้อหาของปลั๊กอินสร้างหน้าเว็บ:
- ลงทะเบียนวิดเจ็ตของปลั๊กอินสร้างหน้าเว็บที่กำหนดเองสำหรับการแปล
- ลงทะเบียนเนื้อหาของปลั๊กอินสร้างหน้าเว็บสำหรับการแปล
ทดสอบการตั้งค่า
1. สร้างหน้าที่มีวิดเจ็ตที่กำหนดเองทั้งหมดของคุณ
2. ส่งหน้าเพื่อรับการแปลและตรวจสอบว่าข้อความของวิดเจ็ตปรากฏในตัวแก้ไขการแปลขั้นสูง
3. ตรวจสอบว่าคำแปลแสดงบนส่วนหน้าเว็บไซต์
4. ทำซ้ำขั้นตอนเพื่อทดสอบการตั้งค่าวิดเจ็ตแบบต่าง ๆ
4. ดึง ID จากภาษาต่าง ๆ โดยอัตโนมัติ
หากธีมหรือปลั๊กอินของคุณมีฟีเจอร์หรือตัวเลือกที่โหลด ID โพสต์ที่แตกต่างกันในแต่ละภาษา ให้ใช้ฟิลเตอร์ wpml_object_id เพื่อดึง ID โพสต์ที่แปลแล้วโดยอัตโนมัติ
ตัวอย่างเช่น ลองพิจารณาสไลเดอร์ที่มีสไลด์ในภาษาต่าง ๆ ซึ่งแต่ละสไลด์มี ID ที่ไม่ซ้ำกัน หากต้องการโหลด ID สไลด์ที่ถูกต้องในแต่ละภาษาโดยอัตโนมัติ เราสามารถใช้ฟิลเตอร์ wpml_object_id ได้:
// Loop posts while (have_posts()): the_post(); $post = get_post( apply_filters( 'wpml_object_id', $post->ID, 'slide' ) );
ทดสอบการตั้งค่า
1. สร้างโพสต์ / เทมเพลต ฯลฯ ที่เกี่ยวข้อง และเพิ่มสตริงข้อความ
2. ตั้งค่าฟีเจอร์ของคุณให้ใช้โพสต์นั้น
3. แปลโพสต์และตั้งค่าที่แตกต่างกันในสตริงข้อความ
4. ตรวจสอบว่าฟีเจอร์โหลด ID ที่แปลแล้วบนส่วนหน้าเว็บไซต์
5. ทำให้เข้ากันได้กับ WooCommerce
WPML สามารถแปลเนื้อหา WooCommerce ได้ด้วยส่วนเสริม WPML Multilingual & Multicurrency for WooCommerce หากธีมหรือปลั๊กอินของคุณมีองค์ประกอบของ WooCommerce ให้ทำตามคู่มือความเข้ากันได้ของ WPML Multilingual & Multicurrency for WooCommerce ของเราเพื่อทำให้เข้ากันได้กับ WPML
6. แสดงหรือซ่อนตัวสลับภาษาของผู้ดูแลระบบ
ตามค่าเริ่มต้น WPML จะเพิ่มตัวสลับภาษาลงในแถบผู้ดูแลระบบของ WordPress ตัวสลับภาษานี้จะมองเห็นได้สำหรับผู้ใช้ที่เข้าสู่ระบบ ทั้งบนส่วนหน้าเว็บไซต์และส่วนหลังเว็บไซต์

ในบางกรณี คุณอาจต้องการซ่อนตัวสลับภาษาบนหน้าที่ละเอียดอ่อน เช่น พื้นที่การตั้งค่าของคุณ ในการดำเนินการนี้ ให้เพิ่มโค้ดต่อไปนี้ลงในไฟล์ functions.php ของคุณ:
//Make sure to rename the function before adding to your plugin
add_filter( 'wpml_show_admin_language_switcher', 'compsupp_disable_wpml_admin_lang_switcher' );
function compsupp_disable_wpml_admin_lang_switcher( $state ) {
global $pagenow;
// Add the admin pages that we need to hide the language switcher
$admin_pages_to_hide_ls = array(
'admin-page-slug', 'another-admin-page-slug', 'one-more-admin-page-slug'
);
// We can also have a filter here in case we need to add/remove pages later
$admin_pages_to_hide_ls = apply_filters( 'compsupp_filter_disable_wpml_lang_switcher_in_admin', $admin_pages_to_hide_ls);
if (
$pagenow == 'admin.php'
&& isset( $_GET['page'] )
&& in_array( $_GET['page'], $admin_pages_to_hide_ls)
) {
$state = false;
}
return $state;
}
การทำให้ฟีเจอร์พิเศษเข้ากันได้
หากธีมหรือปลั๊กอินของคุณมีฟีเจอร์พิเศษ (เช่น การใช้ตารางที่กำหนดเอง) คุณจะต้องใช้โค้ดที่กำหนดเองเพื่อทำให้เข้ากันได้กับ WPML
ดูแหล่งข้อมูลสำหรับนักพัฒนาของเราสำหรับข้อมูลเกี่ยวกับการพัฒนาที่กำหนดเอง
ปัญหาที่พบบ่อยและวิธีแก้ปัญหา
ป้ายกำกับฟอร์มไม่สามารถแปลได้เนื่องจากมาจากฐานข้อมูล
วิธีแก้ปัญหา:
$label = esc_html( apply_filters('wpml_translate_single_string', $this->checkout_item->name, 'wpsc', '$this->checkout_item->name .'_checkout_form_label'' ) );
wp_query($args) หรือ get_posts($args) ไม่กรอง ID โพสต์ที่ถูกต้องสำหรับภาษาปัจจุบัน
วิธีแก้ปัญหา:
หากคุณใช้ wp_query($args) หรือ get_posts($args) คุณต้องเพิ่ม "suppress_filters=0" ลงในอาร์กิวเมนต์
สไลด์ทั้งหมดแสดงในภาษาเดียว
วิธีแก้ปัญหา:
// Unset not translated slides
foreach( $slides as $k => $slide ) {
$check = apply_filters( 'wpml_post_language_details', NULL, $slide->ID )
$slide_language_code = substr( $check['locale'], 0, 2 );
if( $check['different_language'] ) {
unset( $slides[$k] );
}
}
ID สไลด์แตกต่างกันในภาษาที่สอง
วิธีแก้ปัญหา:
// Loop posts while (have_posts()): the_post(); $post = get_post( apply_filters( 'wpml_object_id', $post->ID, 'slide' ) );
สไลเดอร์ใช้หน้าผู้ดูแลระบบที่กำหนดเองและฉันจำเป็นต้องลงทะเบียนค่าฟิลด์ที่กำหนดเองเพื่อรับการแปล
วิธีแก้ปัญหา:
// Adding a new slide code $slide_id = $this->slide->ID; $url = $fields['url']; // Register slide URL to translations do_action( 'wpml_register_single_string', 'Slider', 'Slide_ID_' . $this->slide->ID, $url); $this->add_or_update_or_delete_meta($this->slide->ID, 'url', $url);
ID อนุกรมวิธานที่กำหนดเองแตกต่างกันในภาษาที่สอง
วิธีแก้ปัญหา:
$taxonomy_id = apply_filters( 'wpml_object_id', $taxonomy_id, 'my_custom_taxonomy' );
คำขอ AJAX ที่กำหนดเอง (ไม่ใช่มาตรฐานของ WordPress) จะส่งคืนเนื้อหาในภาษาเริ่มต้นเสมอ
วิธีแก้ปัญหา:
เมื่อสร้าง URL ของ AJAX ที่กำหนดเอง ให้ใช้ฮุก wpml_current_language และเพิ่มภาษาปัจจุบันเป็นพารามิเตอร์สำหรับ URL ของ AJAX
$ajax_url = 'http://my-site.com/wp-content/plugins/my-plugin/handle-ajax.php';
$my_current_lang = apply_filters( 'wpml_current_language', NULL );
if ( $my_current_lang ) {
$ajax_url = add_query_arg( 'wpml_lang', $my_current_lang, $ajax_url );
// $ajax_url will be something like 'http://my-site.com/wp-content/plugins/my-plugin/handle-ajax.php?wpml_lang=es'
}
เมื่อจัดการกับคำขอ AJAX ที่ไฟล์ handle-ajax.php ก่อนที่จะสร้างผลลัพธ์ของเนื้อหา ให้ใช้ฮุก wpml_switch_language เพื่อสลับภาษาของเนื้อหา ปิดขอบเขตภาษาเมื่อคุณทำเสร็จแล้ว ตั้งแต่ WPML 5.0 การสลับภาษาจะซ้อนทับกัน ดังนั้นทุกการสลับจึงจำเป็นต้องมีการกู้คืนของตัวเอง
if ( ! empty( $_GET[ 'wpml_lang' ] ) ) {
// Opens a language scope. Only a non-empty language code switches the language.
do_action( 'wpml_switch_language', sanitize_text_field( $_GET[ 'wpml_lang' ] ) );
try {
// Run other content queries.
} finally {
// Closes the scope that the call above opened.
do_action( 'wpml_switch_language', null );
}
}
การใช้ค่า "id" ผิดในอาร์กิวเมนต์ WP_Query $args[ 'tax_query' ][ 'field' ]
วิธีแก้ปัญหา:
การใช้อาร์กิวเมนต์ "id" สำหรับพารามิเตอร์ "field" จะใช้ได้กับภาษาเริ่มต้น แต่จะใช้ไม่ได้กับภาษาที่สอง ต่อไปนี้คือตัวอย่างของคิวรีที่ไม่ถูกต้อง:
$args = array(
'post_type' => 'post',
'tax_query' => array(
array(
'taxonomy' => 'people',
'field' => 'id',
'terms' => 'bob',
),
),
);
$query = new WP_Query( $args );
นักพัฒนาควรแก้ไขพารามิเตอร์ "field"
'field' => 'id',
เป็น:
'field' => 'term_id',
อ้างอิง: https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters (เปิดในแท็บใหม่) ไม่มีค่า "id" สำหรับพารามิเตอร์ "field" ค่าเริ่มต้นของพารามิเตอร์นี้คือ "term_id"