apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
- Тип
- filter
- Категория
- Информация о языках для всего сайта
- Версия WPML
- 3.2
Описание
Фильтрует список языков, включенных (активных) для сайта. Этот фильтр обычно используется для создания пользовательских переключателей языков.
Этот фильтр может работать только после того, как был инициализирован глобальный объект $wp_query. Это означает, что его следует вызывать после выполнения действия wp.
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для языка без нее. Пользовательский флаг загружается из папки uploads. Никогда не формируйте путь самостоятельно: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.
- skip_missing(bool) Как обрабатывать языки без переводов.
Пример использования
Аргументы фильтра можно передать в виде строки, как показано в первом примере ниже. Их также можно передать в виде массива, как показано во втором примере далее.
В приведенном ниже примере мы отображаем переключатель языков только с флагами. Однако есть небольшое отличие от переключателя языков только с флагами, который Вы можете настроить в «Настройках языков 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'] ) . '">';
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> ';
}
}
}
В следующем примере ниже мы перенаправляем отсутствующие языки на пользовательскую страницу, где отображаем контактную форму, чтобы пользователи могли уведомить администратора сайта о непереведенном контенте.
Мы также переводим в верхний регистр название активного языка, то есть языка, который мы просматриваем в данный момент, используя функцию 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
Все хуки из категории «Информация о языках для всего сайта» (30)