ฉันจะแสดงวิธีใช้ 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() ?>

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

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

3. การทำให้ลิงก์หน้าแรกไปยังหน้าแรกของแต่ละภาษา
เมื่อผู้เยี่ยมชมคลิกที่ 'หน้าแรก' พวกเขาคาดหวังว่าจะไปยังหน้าแรกโดยไม่ต้องสลับภาษา เนื่องจากแต่ละภาษามี 'หน้าแรก' ที่มี 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 พันธมิตรในธีมในโพสต์ถัดไป


