ทำตามคำแนะนำทีละขั้นตอนของเราเพื่อทำให้ปลั๊กอินและธีมของคุณเข้ากันได้กับ 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 เพื่อสลับภาษาของเนื้อหา
if ( isset( $_GET[ 'wpml_lang' ] ) ) {
do_action( 'wpml_switch_language', $_GET[ 'wpml_lang' ] ); // switch the content language
}
// Run other content queries.
การใช้ค่า "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"