WPML

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

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

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

ไม่มีแพ็คเกจสตริง

The four fields as separate strings, on WPML → Translations → Strings
The four fields as separate strings, on WPML → Translations → Strings

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

มีแพ็คเกจสตริง

The same four fields as one package, on the Translation Dashboard
The same four fields as one package, on the Translation Dashboard

ผู้ใช้สามารถแปลหลายสตริงพร้อมกันในคราวเดียว โดยมีตัวเลือกของการแปลอัตโนมัติ

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

หากคุณต้องการดูการใช้งานแพ็คเกจสตริงที่สมบูรณ์ซึ่งเราครอบคลุมในขั้นตอนด้านล่าง โปรดดู 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

เขียนโดย Amir · อัปเดตล่าสุด 24 มีนาคม 2025