WPML
apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
ประเภท
filter
เวอร์ชัน WPML
3.2

คำอธิบาย

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

ฟิลเตอร์นี้จะทำงานได้ก็ต่อเมื่อมีการสร้างอ็อบเจ็กต์ $wp_query แบบโกลบอลแล้วเท่านั้น ซึ่งหมายความว่าควรเรียกใช้หลังจากเกิด wp action ขึ้น

WPML จะส่งคืนภาษาที่ทำงานอยู่ (เปิดใช้งาน) ของไซต์เป็นอาร์เรย์ พร้อมข้อมูลเกี่ยวกับแต่ละภาษา ตัวอย่างด้านล่างมาจากไซต์ WPML 5.0 ซึ่งมีภาษาเริ่มต้นคือภาษาอังกฤษ (สหรัฐอเมริกา) ภาษาเยอรมันจะให้บริการที่ /de-de/ และภาษาอาหรับจะให้บริการที่ /ar/:

Array
(
 [en-us] => Array
  (
   [id] => 1
   [active] => 1
   [default_locale] => en_US
   [native_name] => English (United States)
   [missing] => 0
   [translated_name] => English (United States)
   [language_code] => en-us
   [country] => US
   [display_code] => en-us
   [country_flag_url] => https://example.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/country/us.svg
   [url] => https://example.com/about
  )

 [de] => Array
  (
   [id] => 3
   [active] => 0
   [default_locale] => de_DE
   [native_name] => Deutsch
   [missing] => 0
   [translated_name] => German
   [language_code] => de
   [country] => DE
   [display_code] => de-de
   [country_flag_url] => https://example.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/country/de.svg
   [url] => https://example.com/de-de/ueber-uns
  )

 [ar] => Array
  (
   [id] => 30
   [active] => 0
   [default_locale] => ar
   [native_name] => العربية
   [missing] => 0
   [translated_name] => Arabic
   [language_code] => ar
   [country] => 
   [display_code] => ar
   [country_flag_url] => https://example.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/language/ar.svg
   [url] => https://example.com/ar/about
  )
)
อ่านที่อยู่ของภาษาจาก url ห้ามสร้างจาก language_code เด็ดขาด ภาษาเยอรมันด้านบนมีรหัส de และที่อยู่ /de-de/ WPML จะปรับรหัส URL เมื่อคุณเพิ่มสองประเทศของภาษาเดียวกันในขั้นตอนเดียวกัน เจ้าของเว็บไซต์ยังสามารถแก้ไขได้ และในโหมดโดเมน ที่อยู่จะเป็นโดเมนที่เจ้าของพิมพ์

คีย์ใน WPML 5.0

  • language_code คือรหัสที่จัดเก็บไว้ ภาษาที่มีประเทศจะระบุประเทศไว้ในรหัสด้วย ตัวอย่างเช่น en-us หรือ de-at ภาษาเยอรมัน ภาษาสเปน ภาษาฝรั่งเศส ภาษาอิตาลี และภาษาดัตช์ จะใช้รหัสแบบธรรมดาสำหรับประเทศต้นทางของตน (de, es, fr, it, nl) ภาษาโปรตุเกสและภาษาจีนจะมีประเทศเสมอ ภาษาอาหรับและภาษาที่มีประเทศเดียวอื่น ๆ จะไม่มีประเทศ ภาษาจะคงรหัสเดิมตอนที่สร้างไว้ ดังนั้นไซต์ที่อัปเกรดแล้วจึงสามารถใช้ en ในขณะที่ไซต์ใหม่ใช้ en-us
  • country คือรหัสประเทศของภาษา ซึ่งจะว่างเปล่าสำหรับภาษาที่ไม่มีประเทศ
  • display_code คือรหัสที่ WPML ใช้ใน URL ซึ่งจะแตกต่างจาก language_code เมื่อ WPML ปรับรหัส หรือเมื่อเจ้าของเว็บไซต์แก้ไขรหัสนั้น หากต้องการอ่านแมปเดียวกันในโค้ดของคุณเอง ให้ใช้ฟิลเตอร์ wpml_language_codes_map
  • country_flag_url คือ URL ของธง ซึ่งจะเป็นสตริงว่างเมื่อไซต์แสดงรหัสภาษาแทนธง ดังนั้นควรทดสอบค่าก่อนที่คุณจะแสดงผล ธงของ WPML เองคือ res/flags/country/<country>.svg สำหรับภาษาที่มีประเทศ และ res/flags/language/<code>.svg สำหรับภาษาที่ไม่มีประเทศ ธงที่กำหนดเองจะมาจากโฟลเดอร์อัปโหลด ห้ามสร้างเส้นทางด้วยตัวเองเด็ดขาด: res/flags/sv.svg คือธงของประเทศสวีเดน และ res/flags/country/sv.svg คือธงของประเทศเอลซัลวาดอร์

บนไซต์ที่ยังอัปเกรด WPML ไม่เสร็จสิ้น country อาจเป็น NULL และอาจไม่มี display_code ให้ใช้ isset() ก่อนที่คุณจะอ่านค่าเหล่านี้

ฟิลเตอร์ 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

ตัวอย่างการใช้งาน

อย่าลืม escape เอาต์พุตใด ๆ โปรดดูหน้าเกี่ยวกับ การทำความสะอาดข้อมูล/การ escape เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุด

อาร์กิวเมนต์ของฟิลเตอร์สามารถส่งผ่านเป็น 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'] ) . '">';
            if ( '' !== $l['country_flag_url'] ) {
                echo '<img src="' . esc_url( $l['country_flag_url'] ) . '" height="12" alt="' . esc_attr( $l['language_code'] ) . '" width="18" />';
            } else {
                echo esc_html( $l['language_code'] );
            }
            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

ฮุก ข้อมูลภาษาทั่วทั้งไซต์ ทั้งหมด 30 ตัว