WPML

ภาพหน้าจอ Atahualpaฉันจะแสดงวิธีใช้ Atahualpa จาก Bytes For All เพื่อสร้างเว็บไซต์ WordPress หลายภาษาโดยใช้ WPML

ธีมสำหรับเว็บไซต์ WordPress หลายภาษาจำเป็นต้องมีสตริงข้อความทั้งหมดที่ครอบด้วยการเรียก gettext แต่นั่นยังไม่เพียงพอ การใช้ gettext ในธีมจะช่วยให้สามารถแสดงผลในภาษา (เดียว) ที่แตกต่างจากภาษาเดิมที่สร้างขึ้นมาได้

ในการทำงานแบบหลายภาษา ธีมจำเป็นต้องอนุญาตให้ผู้เยี่ยมชมสามารถเลือกภาษาที่ใช้แสดงผลและส่งมอบเนื้อหาที่ถูกต้องตามแต่ละภาษาได้

เวอร์ชันหลายภาษาสำหรับ Atahualpa


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

สิ่งที่เราเปลี่ยนแปลงเพื่อให้ Atahualpa เป็นแบบหลายภาษา

1. การเพิ่ม wpml-integration.php ลงในไดเรกทอรีของธีม


wpml-integration.php อยู่ในไดเรกทอรีของ WPML ภายใต้ docs/theme-integration โดยประกอบด้วยชุดฟังก์ชันที่ช่วยเปลี่ยนธีมให้เป็นแบบหลายภาษา

ฟังก์ชันทั้งหมดนี้ได้รับการออกแบบมาเพื่อให้ธีมใช้ WPML หากเปิดใช้งานอยู่ หรือข้ามไปหากไม่มี WPML ซึ่งหมายความว่าธีมจะทำงานแบบหลายภาษาหากมี WPML หรือทำงานตามปกติ (ภาษาเดียว) หากไม่มี

เพิ่มลงใน functions.php:

include dirname(__FILE__) . '/wpml-integration.php';

คำสั่งนี้จะโหลด wpml-integration.php และทำให้ไฟล์ทั้งหมดในธีมสามารถใช้งานได้

2. การเพิ่มตัวเลือกภาษา


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

เราได้เพิ่มตัวเลือกภาษาแบบดรอปดาวน์ของ WPML ลงในแถบด้านข้างโดยเพิ่มลงใน header.php:

<?php wpml_languages_selector() ?>
ตัวเลือกภาษาแบบดรอปดาวน์ของ Atahualpa
ตัวเลือกภาษาแบบดรอปดาวน์

เรายังได้เพิ่มรายการภาษาแนวนอนลงในส่วนท้ายของเว็บไซต์ด้วย ผู้ใช้จำนวนมากมักจะเลื่อนลงไปด้านล่างสุดก่อนเพื่อดูว่ามีอะไรอยู่บ้าง (และหน้าเว็บยาวแค่ไหน) ดังนั้นจึงเป็นตำแหน่งที่ดีในการบอกว่ามีหน้าเว็บในภาษาอื่น ๆ ให้บริการ เราได้เพิ่มโค้ดต่อไปนี้ลงใน footer.php:

<?php wpml_languages_list() ?>
ตัวเลือกภาษาแนวนอนในส่วนท้าย
ตัวเลือกภาษาแนวนอนในส่วนท้าย

สุดท้าย เราได้เพิ่มตัวเลือกภาษาไว้ที่ท้ายโพสต์แต่ละโพสต์ ซึ่งจะเป็นการเพิ่มประโยคในแต่ละโพสต์เพื่อบอกว่ามีภาษาอื่นใดให้บริการบ้าง เพิ่มโค้ดต่อไปนี้ลงใน index.php (ซึ่งมีลูปการแสดงผลของ WordPress เวอร์ชันแบบกำหนดเอง):

<?php if(is_singular()) wpml_content_languages(); ?>
รายการภาษาที่แปล
รายการภาษาที่แปล

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

โดยปกติแล้ว ธีม WordPress จะคำนวณที่อยู่สำหรับ 'หน้าแรก' ตามค่า 'Blog URL' ที่ตั้งไว้ในหน้าจัดการเว็บไซต์ WPML ได้สร้างฟังก์ชันที่คำนวณที่อยู่หน้าแรกที่ถูกต้องตามภาษาที่แสดงผล

เราได้แทนที่ get_option('home’) ด้วย wpml_get_home_url() นอกจากนี้ ฟังก์ชัน get_option('home’) จะส่งคืนตำแหน่งของเว็บไซต์โดยไม่มีเครื่องหมายทับต่อท้าย (/) ดังนั้นธีมจึงต้องเพิ่มเข้าไปเอง แต่ฟังก์ชันของ WPML ได้รวมเครื่องหมายทับนี้ไว้แล้ว (ซึ่งมีเรื่องราวเบื้องหลังที่ยาวนาน)

ในการทำการเปลี่ยนแปลงนี้ เราต้องแก้ไขไฟล์สองไฟล์ แก้ไข functions/bfa_get_options.php และเปลี่ยน:

$bfa_ata['get_option_home'] = get_option('home');

เป็น
$bfa_ata['get_option_home'] = wpml_get_home_url();

นอกจากนี้ ให้แก้ไข functions/bfa_header_config.php และลบเครื่องหมายทับต่อท้ายออกจากลิงก์หน้าแรก:
'<a href="' . $bfa_ata['get_option_home'] . '">' . $bfa_ata['bloginfo_name'] . '</a>'

4. ขั้นสูงมาก – การแปลข้อความที่ผู้ใช้ป้อนในหน้าจัดการเว็บไซต์ของธีม


Atahualpa อนุญาตให้ควบคุมข้อความบางส่วนผ่านหน้าจัดการเว็บไซต์ สิ่งนี้เป็นข้อดีที่ช่วยให้สามารถจัดการเว็บไซต์ได้โดยไม่ต้องแก้ไขไฟล์ PHP WPML สามารถแปลสตริงข้อความเหล่านี้ได้เช่นกันโดยใช้กลไกการแปลสตริง

ในการดำเนินการนี้ ธีมจำเป็นต้องแจ้งให้ WPML ทราบว่าสตริงใดที่ต้องแปล จากนั้นจึงแสดงคำแปลหากมี

เมื่อผู้ใช้ไปยังหน้าจัดการเว็บไซต์ของธีม อัปเดตข้อความ และคลิก "บันทึก" ฟังก์ชัน bfa_ata_add_admin จาก functions/bfa_ata_add_admin.php จะถูกเรียกใช้งาน เราได้เพิ่มส่วนต่อไปนี้เข้าไป (เริ่มตั้งแต่บรรทัดที่ 11):

global $wpml_translatable_strings;

 foreach($wpml_translatable_strings as $wpml_str ){

   if(isset($_REQUEST['bfa_ata_'.$wpml_str]) && trim($_REQUEST['bfa_ata_'.$wpml_str])){

    wpml_register_string('atahualpa theme', $wpml_str, stripslashes($_REQUEST['bfa_ata_'.$wpml_str]));

  }

 }

สิ่งที่ทำคือการเรียกใช้รายการสตริงที่กำหนดไว้ในตัวแปรโกลบอล $wpml_translatable_strings โดยจะลงทะเบียนแต่ละสตริงในรายการการแปลสตริงของ WPML

อาร์กิวเมนต์แรกคือบริบทสำหรับสตริง คุณสามารถใช้ชื่อใดก็ได้ แต่ควรเลือกชื่อที่อธิบายสตริงนั้น ๆ อาร์กิวเมนต์ที่สองคือชื่อสำหรับสตริง (จะไม่มีการแปล) อาร์กิวเมนต์สุดท้ายคือค่าของสตริง – ซึ่งจะถูกแปล

ในการแสดงคำแปล (หากมี) เราได้เพิ่มฟังก์ชัน wpml_t ลงใน functions/bfa_get_options.php (เริ่มตั้งแต่บรรทัดที่ 204):

global $wpml_translatable_strings;

foreach($bfa_ata as $k=>$v){

   if(in_array($k, $wpml_translatable_strings) || $__first){

    $bfa_ata[$k] = wpml_t('atahualpa theme', $k, $v);     

  }

}

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

การทำให้ธีม WordPress อื่น ๆ เป็นแบบหลายภาษา


เราได้ทำงานในลักษณะเดียวกันนี้กับ iNove และ Arras แล้ว และกำลังวางแผนที่จะแปลงธีมอื่น ๆ ให้เป็นแบบหลายภาษาเพิ่มเติม

ความตั้งใจของเราคือการจัดเตรียมธีมหลายภาษาที่พร้อมใช้งาน และช่วยคุณสร้างธีมที่พร้อมรองรับหลายภาษา (Multilingual Ready) ด้วยตัวคุณเอง ด้วยการใช้เทคนิคที่เราอธิบายไว้ที่นี่ คุณสามารถสร้างธีมที่จะทำงานแบบหลายภาษาเมื่อมี WPML หรือทำงานในภาษาเดียวเมื่อไม่มี WPML ได้

หากคุณกำลังสร้างธีมและต้องการความช่วยเหลือในการทำให้เป็นแบบหลายภาษา โปรดตั้งกระทู้ใหม่ในฟอรัม

คุณยังสามารถสร้างรายได้ (รายได้แบบพาสซีฟที่แท้จริง) ด้วยการเพิ่มการรองรับหลายภาษาลงในธีมของคุณ เราจะพูดคุยเกี่ยวกับการใส่ ID พันธมิตรในธีมในโพสต์ถัดไป

พบว่าสิ่งนี้มีประโยชน์หรือไม่? แชร์บทความนี้: