WPML
apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
Loại
filter
Phiên bản WPML
3.2

Miêu tả

Lọc danh sách các ngôn ngữ được bật (hoạt động) cho một trang web. Bộ lọc này thường được sử dụng để tạo các bộ chuyển đổi ngôn ngữ tùy chỉnh.

Bộ lọc này chỉ có thể hoạt động khi đối tượng $wp_query toàn cục đã được khởi tạo. Điều này có nghĩa là nó nên được gọi sau khi hành động wp diễn ra.

WPML trả về các ngôn ngữ đang hoạt động (được bật) của một trang web dưới dạng một mảng, kèm theo thông tin về từng ngôn ngữ. Ví dụ dưới đây đến từ một trang web WPML 5.0. Ngôn ngữ mặc định của trang là tiếng Anh (Hoa Kỳ), tiếng Đức được phục vụ tại /de-de/ và tiếng Ả Rập được phục vụ tại /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
  )
)
Đọc địa chỉ của một ngôn ngữ từ url. Không bao giờ tự tạo nó từ language_code. Tiếng Đức ở trên có mã de và địa chỉ /de-de/. WPML sẽ định danh mã URL khi bạn thêm hai quốc gia của cùng một ngôn ngữ trong cùng một bước, chủ website cũng có thể chỉnh sửa nó và trong chế độ tên miền, địa chỉ chính là tên miền mà chủ website đã nhập.

Các khóa trong WPML 5.0

  • language_code là mã được lưu trữ. Một ngôn ngữ đi kèm với một quốc gia sẽ có quốc gia đó trong mã, ví dụ en-us hoặc de-at. Tiếng Đức, tiếng Tây Ban Nha, tiếng Pháp, tiếng Ý và tiếng Hà Lan giữ nguyên mã đơn thuần cho quốc gia gốc của chúng (de, es, fr, it, nl). Tiếng Bồ Đào Nha và tiếng Trung luôn đi kèm với một quốc gia. Tiếng Ả Rập và các ngôn ngữ thuộc một quốc gia duy nhất khác không đi kèm quốc gia nào. Một ngôn ngữ giữ nguyên mã mà nó được tạo ban đầu, vì vậy một trang web được nâng cấp có thể sử dụng en trong khi một trang web mới sử dụng en-us.
  • country là mã quốc gia của ngôn ngữ. Giá trị này sẽ trống đối với ngôn ngữ không có quốc gia.
  • display_code là mã mà WPML sử dụng trong các URL. Nó khác với language_code khi WPML định danh mã, hoặc khi chủ website chỉnh sửa nó. Để đọc cùng một ánh xạ này trong mã của riêng bạn, hãy sử dụng bộ lọc wpml_language_codes_map.
  • country_flag_url là URL của lá cờ. Nó là một chuỗi rỗng khi trang web hiển thị mã ngôn ngữ thay vì lá cờ, vì vậy hãy kiểm tra giá trị trước khi bạn in nó ra. Các lá cờ của chính WPML là res/flags/country/<country>.svg đối với ngôn ngữ có quốc gia và res/flags/language/<code>.svg đối với ngôn ngữ không có quốc gia. Một cờ tùy chỉnh sẽ được lấy từ thư mục tải lên. Không bao giờ tự tạo đường dẫn: res/flags/sv.svg là cờ của Thụy Điển và res/flags/country/sv.svg là cờ của El Salvador.

Trên một trang web chưa hoàn thành quá trình nâng cấp của WPML, country có thể là NULL và display_code có thể không tồn tại. Hãy sử dụng isset() trước khi bạn đọc chúng.

Bộ lọc wpml_active_languages cung cấp một cách để thực hiện những việc như sắp xếp lại mảng ngôn ngữ. Hoặc một điều gì đó phức tạp hơn, như chuyển hướng các ngôn ngữ bị thiếu đến một URL tùy chỉnh.

Tham số

$empty_value
(mixed) (Bắt buộc) Đây thường là giá trị mà bộ lọc sẽ sửa đổi. Chúng ta không lọc bất kỳ thứ gì ở đây nên hãy đặt giá trị này thành NULL. Điều này để hàm bộ lọc thực sự nhận được danh sách đối số đầy đủ
$args
(array|string) (Tùy chọn) Các đối số để lọc đầu ra ngôn ngữ
  • skip_missing(bool) Cách xử lý các ngôn ngữ không có bản dịch. 1 để bỏ qua ngôn ngữ hoặc 0 để liên kết đến trang chủ của ngôn ngữ đối với các bản dịch bị thiếu.
  • link_empty_to(string) Hoạt động kết hợp với skip_missing = 0 và cho phép sử dụng các liên kết tùy chỉnh cho các ngôn ngữ không có bản dịch cho phần tử hiện tại. {%lang} có thể được sử dụng làm trình giữ chỗ cho mã ngôn ngữ. Trống theo mặc định.
  • orderby(string) Chấp nhận id|code|name Mặc định là custom. Thứ tự tùy chỉnh có thể được xác định trong trang quản trị WordPress theo WPML » Cài đặt » Bộ chuyển đổi ngôn ngữ » Tùy chọn bộ chuyển đổi ngôn ngữ
  • order(string) Chấp nhận asc|desc

Ví dụ sử dụng

Hãy nhớ escape mọi đầu ra. Xem trang về làm sạch/escape dữ liệu để tìm hiểu thêm về các phương pháp hay nhất.

Các đối số của bộ lọc có thể được truyền cho nó dưới dạng string như được hiển thị trong ví dụ đầu tiên bên dưới. Chúng cũng có thể được truyền dưới dạng array như bạn có thể thấy trong ví dụ thứ hai ở phần sau.

Trong ví dụ bên dưới, chúng tôi hiển thị một bộ chuyển đổi ngôn ngữ chỉ có cờ. Tuy nhiên, có một sự khác biệt nhỏ so với bộ chuyển đổi ngôn ngữ chỉ có cờ mà bạn có thể cấu hình từ “Cài đặt ngôn ngữ WPML” của bạn trong trang quản trị.

Sự khác biệt ở đây là ngôn ngữ hiện tại sẽ không được bọc trong một thẻ neo. Chỉ các ngôn ngữ thay thế của trang mới có một liên kết. Hãy cùng xem.

Ví dụ
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> ';
        }
    }
}

Trong ví dụ tiếp theo mà bạn thấy bên dưới, chúng tôi chuyển hướng các ngôn ngữ bị thiếu đến một trang tùy chỉnh, nơi chúng tôi hiển thị một biểu mẫu liên hệ để mọi người thông báo cho quản trị viên trang web về nội dung chưa được dịch.
Chúng tôi cũng viết hoa tên ngôn ngữ của ngôn ngữ đang hoạt động, tức là ngôn ngữ chúng ta đang xem, bằng cách sử dụng hàm strtoupper của PHP.
Ví dụ thứ hai
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

Tất cả 30 hook Thông tin ngôn ngữ toàn trang web