apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
- ประเภท
- filter
- หมวดหมู่
- ข้อมูลภาษาทั่วทั้งไซต์
- เวอร์ชันของ WPML
- 3.2
คำอธิบาย
ฟิลเตอร์รายการภาษาที่เปิดใช้งาน (แอกทีฟ) สำหรับไซต์ ฟิลเตอร์นี้มักใช้เพื่อสร้างตัวสลับภาษาแบบกำหนดเอง
ฟิลเตอร์นี้จะทำงานได้ก็ต่อเมื่อมีการสร้างอินสแตนซ์ของออบเจ็กต์ $wp_query แบบโกลบอลแล้วเท่านั้น ซึ่งหมายความว่าควรเรียกใช้หลังจากที่ wp action เกิดขึ้น
WPML จะส่งคืนภาษาที่แอกทีฟ (เปิดใช้งาน) ของไซต์เป็นอาร์เรย์พร้อมข้อมูลที่เกี่ยวข้องสำหรับแต่ละภาษา ตัวอย่างเช่น สำหรับไซต์ WordPress ที่ใช้งานภาษาอังกฤษ ภาษาฝรั่งเศส และภาษาอิตาลี ฮุกจะส่งคืนค่าดังนี้:
Array ( [en] => Array ( [id] => 1 [active] => 1 [default_locale] => en_US [native_name] => English [missing] => 0 [translated_name] => English [language_code] => en [country_flag_url] => http://yourdomain/wpmlpath/res/flags/en.png [url] => http://yourdomain/about ) [fr] => Array ( [id] => 4 [active] => 0 [default_locale] => fr_FR [native_name] => Français [missing] => 0 [translated_name] => French [language_code] => fr [country_flag_url] => http://yourdomain/wpmlpath/res/flags/fr.png [url] => http://yourdomain/fr/a-propos ) [it] => Array ( [id] => 27 [active] => 0 [default_locale] => it_IT [native_name] => Italiano [missing] => 0 [translated_name] => Italian [language_code] => it [country_flag_url] => http://yourdomain/wpmlpath/res/flags/it.png [url] => http://yourdomain/it/circa ) )
ฟิลเตอร์ wpml_active_languages เป็นวิธีในการดำเนินการต่างๆ เช่น การจัดลำดับอาร์เรย์ภาษาใหม่ หรือสิ่งที่ซับซ้อนกว่านั้น เช่น การเปลี่ยนเส้นทางภาษาที่ขาดหายไปไปยัง URL แบบกำหนดเอง
อาร์กิวเมนต์
- $empty_value
- (mixed) (จำเป็น) โดยปกติแล้วนี่คือค่าที่ฟิลเตอร์จะแก้ไข เราไม่ได้กรองสิ่งใดที่นี่ ดังนั้นให้ตั้งค่านี้เป็น NULL เพื่อให้ฟังก์ชันฟิลเตอร์ได้รับรายการอาร์กิวเมนต์แบบเต็ม
- $args
- (array|string) (ไม่บังคับ) อาร์กิวเมนต์สำหรับกรองเอาต์พุตภาษา
- skip_missing(bool) วิธีจัดการกับภาษาที่ไม่มีการแปล
1เพื่อข้ามภาษา หรือ0เพื่อลิงก์ไปยังหน้าแรกของภาษาสำหรับการแปลที่ขาดหายไป - link_empty_to(string) ทำงานร่วมกับ skip_missing = 0 และอนุญาตให้ใช้ลิงก์แบบกำหนดเองสำหรับภาษาที่ไม่มีการแปลสำหรับอิลิเมนต์ปัจจุบัน สามารถใช้
{%lang}เป็นตัวยึดตำแหน่งสำหรับรหัสภาษา ค่าเริ่มต้นคือว่างเปล่า - orderby(string) ยอมรับ
id|code|nameค่าเริ่มต้นคือ custom คุณสามารถกำหนดลำดับแบบกำหนดเองได้ในหน้าจัดการเว็บไซต์ WordPress ภายใต้ WPML » ภาษา » ตัวเลือกตัวสลับภาษา - order(string) ยอมรับ
asc|desc
- skip_missing(bool) วิธีจัดการกับภาษาที่ไม่มีการแปล
ตัวอย่างการใช้งาน
อาร์กิวเมนต์ของฟิลเตอร์สามารถส่งผ่านเป็น string ได้ดังที่แสดงในตัวอย่างแรกด้านล่าง นอกจากนี้ยังสามารถส่งผ่านเป็น array ได้ตามที่คุณเห็นในตัวอย่างที่สองถัดไป
ในตัวอย่างด้านล่าง เราจะแสดงตัวสลับภาษาแบบธงเท่านั้น อย่างไรก็ตาม มีความแตกต่างเล็กน้อยจากตัวสลับภาษาแบบธงเท่านั้นที่คุณสามารถกำหนดค่าได้จาก “การตั้งค่าภาษาของ WPML” ในหน้าจัดการเว็บไซต์
ความแตกต่างในที่นี้คือภาษาปัจจุบันจะไม่ถูกครอบด้วยแท็ก anchor จะมีเพียงภาษาทางเลือกของหน้าเท่านั้นที่มีลิงก์ ลองดูตัวอย่าง
ตัวอย่าง
function my_flag_only_language_switcher() {
$languages = apply_filters( 'wpml_active_languages', NULL, 'orderby=id&order=desc' );
if ( !empty( $languages ) ) {
foreach( $languages as $l ) {
if ( !$l['active'] ) echo ' <a href="' . esc_url( $l['url'] ) . '">';
echo '<img src="' . esc_url ( $l['country_flag_url'] ) . '" height="12" alt="' . esc_attr( $l['language_code'] ) . '" width="18" />';
if ( !$l['active'] ) echo '</a> ';
}
}
}
ในตัวอย่างถัดไปที่คุณเห็นด้านล่าง เราจะเปลี่ยนเส้นทางภาษาที่ขาดหายไปไปยังหน้าแบบกำหนดเอง ซึ่งเราจะแสดงแบบฟอร์มการติดต่อเพื่อให้ผู้คนแจ้งให้ผู้ดูแลเว็บไซต์ทราบเกี่ยวกับเนื้อหาที่ยังไม่ได้แปล
เรายังทำให้ชื่อภาษาของภาษาที่ใช้งานอยู่เป็นตัวพิมพ์ใหญ่ด้วย กล่าวคือภาษาที่เรากำลังดูอยู่ โดยใช้ฟังก์ชัน
strtoupper ของ PHP
ตัวอย่างที่สอง
function my_custom_language_switcher() {
$languages = apply_filters( 'wpml_active_languages', NULL, array( 'skip_missing' => 0, 'link_empty_to' => 'http://domain.com/missing-translation-contact-form' ) );
if( !empty( $languages ) ) {
foreach( $languages as $language ){
$native_name = $language['active'] ? strtoupper( $language['native_name'] ) : $language['native_name'];
if( !$language['active'] ) echo '<a href="' . esc_url( $language['url'] ) . '">';
echo esc_html( $native_name ) . ' ';
if( !$language['active'] ) echo '</a>';
}
}
}
ฮุกที่เกี่ยวข้อง
wpml_decode_custom_field, wpml_footer_language_selector, wpml_add_language_form_field, wpml_ls_exclude_in_menu, wpml_is_rtl, wpml_alternate_hreflang, wpml_head_langs, wpml_must_translate_canonical_url, wpml_browser_redirect_language_params, wpml_encode_custom_field