WPML
apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
Тип
filter
Версия WPML
3.2

Описание

Фильтрует список языков, включенных (активных) на сайте. Этот фильтр обычно используется для создания пользовательских переключателей языков.

Этот фильтр может работать только тогда, когда инициализирован глобальный объект $wp_query. Это означает, что его следует вызывать после выполнения действия wp.

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.

Пример использования

Не забывайте экранировать любой вывод. Дополнительную информацию о передовых методах см. на странице об очистке/экранировании данных.

Аргументы фильтра можно передать в виде строки, как показано в первом примере ниже. Их также можно передать в виде массива, как показано во втором примере далее.

В приведенном ниже примере мы отображаем переключатель языков только с флагами. Однако есть небольшое отличие от переключателя языков только с флагами, который Вы можете настроить в «Настройках языков WPML» в админ-панели.

Разница здесь в том, что текущий язык не будет обернут в тег ссылки. Ссылки будут иметь только альтернативные языки страницы. Взгляните.

Пример
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> ';
        }
    }
}

В следующем примере ниже мы перенаправляем отсутствующие языки на пользовательскую страницу, где отображаем контактную форму, чтобы пользователи могли уведомить администратора сайта о непереведенном контенте.
Мы также делаем заглавной первую букву названия активного языка, то есть языка, который мы просматриваем в данный момент, используя функцию PHP strtoupper.
Второй пример
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

Все хуки категории «Информация о языках для всего сайта» (29) →