เรียนรู้วิธีสร้างแพ็คเกจสตริงสำหรับปลั๊กอินและธีมของคุณเพื่อช่วยให้ผู้ใช้แปลเนื้อหาด้วย WPML ได้อย่างง่ายดาย
แพ็คเกจสตริงคือกลุ่มของสตริงที่ "รวม" เข้าด้วยกันในบริบทเฉพาะ จุดประสงค์คือเพื่อช่วยให้ผู้ใช้ปลายทางแปลเนื้อหาได้อย่างมีประสิทธิภาพมากขึ้นโดยไม่จำเป็นต้องแปลแต่ละสตริงทีละรายการ
ตัวอย่างเช่น นี่คือวิธีที่ผู้ใช้จะแปลฟิลด์ผู้ใช้ที่กำหนดเอง ทั้งแบบมีและไม่มีแพ็คเกจสตริง:
ไม่มีแพ็คเกจสตริง

ผู้ใช้จำเป็นต้องแปลสตริงทีละรายการ โดยไม่มีตัวเลือกของการแปลอัตโนมัติ
มีแพ็คเกจสตริง

ผู้ใช้สามารถแปลหลายสตริงพร้อมกันในคราวเดียว โดยมีตัวเลือกของการแปลอัตโนมัติ
ดังที่คุณเห็น แพ็คเกจสตริงช่วยลดความยุ่งยากในกระบวนการแปลโดยให้ผู้ใช้แปลฟิลด์ผู้ใช้ที่กำหนดเองหลายรายการได้ในครั้งเดียว เพื่อมอบประสบการณ์การแปลที่ดีที่สุดให้กับผู้ใช้ของคุณ ให้ทำตามขั้นตอนด้านล่างเพื่อสร้างแพ็คเกจสตริงของคุณเอง
หากคุณต้องการดูการใช้งานแพ็คเกจสตริงที่สมบูรณ์ซึ่งเราครอบคลุมในขั้นตอนด้านล่าง โปรดดู GitHub repo นี้ที่มีปลั๊กอินทดสอบที่เราใช้
1. ระบุเนื้อหาที่แปลได้
ขั้นตอนแรกคือการระบุเนื้อหาที่ผู้ใช้ต้องการแปล เช่น ชื่อเรื่อง ป้ายกำกับ และเนื้อหาที่ผู้ใช้สร้างขึ้น
2. ประกาศประเภทแพ็คเกจ
ถัดไป คุณต้องประกาศประเภทแพ็คเกจของคุณ ขั้นตอนนี้ช่วยให้ WPML ตรวจจับได้ว่าแพ็คเกจสตริงใดเชื่อมต่อกับปลั๊กอินที่ใช้งานอยู่ และแปลเฉพาะแพ็คเกจเหล่านั้น
สำหรับการเปรียบเทียบ ฟิลเตอร์นี้ทำงานกับแพ็คเกจสตริงเช่นเดียวกับที่ฟิลเตอร์ register_post_types ทำงานกับประเภทโพสต์
หากต้องการประกาศประเภทแพ็คเกจ ให้ใช้ฟิลเตอร์ wpml_active_string_package_kinds:
define( 'FOO_USER_FIELD_PACKAGE_KIND_TITLE', 'OTGS Foo User Fields' );
define( 'FOO_USER_FIELD_PACKAGE_KIND_SLUG', 'otgs-foo-user-fields' );
add_filter( 'wpml_active_string_package_kinds', function( $kinds ) {
$kinds[ FOO_USER_FIELD_PACKAGE_KIND_SLUG ] = [
'title' => FOO_USER_FIELD_PACKAGE_KIND_TITLE,
'slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG,
'plural' => FOO_USER_FIELD_PACKAGE_KIND_TITLE,
];
return $kinds;
} );
คำจำกัดความของอาร์กิวเมนต์
title – ชื่อของประเภท ควรเหมือนกับ kind สำหรับแพ็คเกจplural – รูปพหูพจน์ของชื่อslug – slug ของประเภท ควรเหมือนกับ kind_slug สำหรับแพ็คเกจ
3. สร้างแพ็คเกจและลงทะเบียนสตริง
ถัดไป คุณต้องสร้างแพ็คเกจและลงทะเบียนสตริงที่จะจัดกลุ่มโดยใช้ฮุก wpml_register_string:
$userId = 123;
$user = get_user_by( 'id', $userId );
$package = [
'kind' => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // The "namespace".
'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG, // The "namespace" slug.
'name' => $userId, // Can be a string or an integer, but should be unique inside the "kind" namespace.
'title' => $user->display_name, // The title for the package entity inside the "kind" namespace.
];
$fooUserFields = get_option( 'otgs_foo_user_fields' );
foreach ( $fooUserFields as $fooUserField ) {
$fieldValue = get_user_meta( $userId, $fooUserField, true );
do_action( 'wpml_register_string', $fieldValue, sanitize_key( $fooUserField ), $package, $fooUserField, 'LINE' );
}
คำจำกัดความของอาร์กิวเมนต์
$kind – ป้ายกำกับเนมสเปซของเอนทิตี (เช่น Gravity Form)$kind_slug – slug เนมสเปซของเอนทิตี (เช่น gravity-form) หากไม่มี จะเป็นเวอร์ชัน slug ของ "kind"$name – ตัวระบุที่ไม่ซ้ำกันของเอนทิตีภายในประเภท อาจเป็นสตริง (เช่น slug) หรือจำนวนเต็ม (เช่น ID)$title – ชื่อของเอนทิตีภายในประเภท ขอแนะนำให้ใช้ชื่อของเอนทิตีจริง
แม้จะไม่จำเป็น แต่คุณยังสามารถรวมอาร์กิวเมนต์เพิ่มเติมสองรายการได้:$edit_link – URL สำหรับแก้ไขออบเจ็กต์$view_link – URL สำหรับดูออบเจ็กต์
4. ดึงข้อมูลการแปล
สุดท้าย ในการแสดงการแปลบนส่วนหน้าเว็บไซต์ คุณต้องใช้ฮุก wpml_translate_string:
$userId = 123;
$user = get_user_by( 'id', $userId );
$package = [
'kind' => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // The "namespace".
'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG, // The "namespace" slug.
'name' => $userId, // Can be a string or an integer, but should be unique inside the "kind" namespace.
'title' => $user->display_name, // The title for the package entity inside the "kind" namespace.
];
$fooUserFields = get_option( 'otgs_foo_user_fields' );
$translatedFieldValues = [];
foreach ( $fooUserFields as $fooUserField ) {
$fieldValue = get_user_meta( $userId, $fooUserField, true );
$translatedFieldValues[ $fooUserField ] = apply_filters( 'wpml_translate_string', $fieldValue, sanitize_key( $fooUserField ), $package );
}
การอัปเดตและการลบสตริง
เมื่อใดก็ตามที่ผู้ใช้อัปเดตเนื้อหา WPML จำเป็นต้องสามารถระบุสตริงใหม่ ตลอดจนสตริงที่ถูกลบออกไป หากต้องการแจ้งให้ WPML ทราบถึงการเปลี่ยนแปลงเหล่านี้ ให้ครอบโค้ดการลงทะเบียนของคุณด้วยฟังก์ชันสองรายการ:
$userId = 123;
$package = [
'kind' => FOO_USER_FIELD_PACKAGE_KIND_TITLE, // The "namespace".
'kind_slug' => FOO_USER_FIELD_PACKAGE_KIND_SLUG, // The "namespace" slug.
'name' => $userId, // Can be a string or an integer, but should be unique inside the "kind" namespace.
// The 'title' key is not not required in the "translate" context.
];
do_action( 'wpml_start_string_package_registration', $package );
$fooUserFields = get_option( 'otgs_foo_user_fields' );
foreach ( $fooUserFields as $fooUserField ) {
$fieldValue = get_user_meta( $userId, $fooUserField, true );
do_action( 'wpml_register_string', $fieldValue, sanitize_key( $fooUserField ), $package, $fooUserField, 'LINE' );
}
do_action( 'wpml_delete_unused_package_strings',$package );
การลบแพ็คเกจสตริง
เมื่อผู้ใช้ลบเนื้อหา คุณควรลบแพ็คเกจสตริงที่เกี่ยวข้องออกด้วย ซึ่งรวมถึงสตริง การแปล และงานทั้งหมดที่เกี่ยวข้อง การล้างข้อมูลนี้จะช่วยให้มั่นใจได้ว่าเว็บไซต์ยังคงทำงานได้อย่างมีประสิทธิภาพโดยไม่มีข้อมูลตกค้างที่ทำให้ฐานข้อมูลรก
หากต้องการลบแพ็คเกจสตริง ให้ฮุกเข้ากับการดำเนินการที่เหมาะสมภายในปลั๊กอินหรือธีมของคุณ และเรียกใช้ฟังก์ชัน wpml_delete_package:
$userId = 123; do_action( 'wpml_delete_package', $userId, FOO_USER_FIELD_PACKAGE_KIND_TITLE );
แหล่งข้อมูลเพิ่มเติม
- ไฟล์การกำหนดค่าภาษาของ WPML – คำแนะนำเกี่ยวกับการใช้ wpml-config.xml ซึ่งเป็นไฟล์ที่ระบุว่าข้อความใดที่ WPML ควรแปลในปลั๊กอินและธีม
- Multilingual Tools – เครื่องมือสำหรับทดสอบการตั้งค่าการกำหนดค่าของคุณและยืนยันความเข้ากันได้กับ WPML