apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
- Tipo
- filter
- Categoria
- Informações de idioma de todo o site
- Versão do WPML
- 3.2
Descrição
Filtra a lista dos idiomas ativados (ativos) para um site. Este filtro geralmente é usado para criar seletores de idiomas personalizados.
Este filtro só pode funcionar quando o objeto global $wp_query for instanciado. Isso significa que ele deve ser chamado depois que a ação wp acontecer.
O WPML retorna os idiomas ativos (ativados) de um site como um array, com informações sobre cada idioma. O exemplo abaixo vem de um site com WPML 5.0. Seu idioma padrão é o inglês (Estados Unidos), o alemão é servido em /de-de/ e o árabe é servido em /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. Nunca o construa a partir de language_code. O alemão acima tem o código de e o endereço /de-de/. O WPML qualifica o código da URL quando você adiciona dois países de um mesmo idioma na mesma etapa, o proprietário do site também pode editá-lo, e no modo de domínio o endereço é o domínio que o proprietário digitou.As chaves no WPML 5.0
- language_code é o código armazenado. Um idioma que carrega um país tem o país no código, por exemplo,
en-usoude-at. O alemão, o espanhol, o francês, o italiano e o holandês mantêm o código simples para seu país de origem (de,es,fr,it,nl). O português e o chinês sempre carregam um país. O árabe e outros idiomas de um único país não carregam nenhum. Um idioma mantém o código com o qual foi criado, portanto, um site que passou por um upgrade pode usarenonde um site novo usaen-us. - country é o código de país do idioma. Ele fica vazio para um idioma sem país.
- display_code é o código que o WPML usa nas URLs. Ele difere de
language_codequando o WPML qualifica o código ou quando o proprietário do site o edita. Para ler o mesmo mapa no seu próprio código, use o filtro wpml_language_codes_map. - country_flag_url é a URL da bandeira. É uma string vazia quando o site mostra o código do idioma em vez de uma bandeira, portanto, teste o valor antes de imprimi-lo. As próprias bandeiras do WPML são
res/flags/country/<country>.svgpara um idioma com um país eres/flags/language/<code>.svgpara um idioma sem país. Uma bandeira personalizada vem da pasta de uploads. Nunca construa o caminho você mesmo:res/flags/sv.svgé a bandeira da Suécia eres/flags/country/sv.svgé a bandeira de El Salvador.
Em um site que não concluiu o upgrade do WPML, country pode ser NULL e display_code pode estar ausente. Use isset() antes de lê-los.
O filtro wpml_active_languages fornece uma maneira de fazer coisas como reordenar o array de idiomas. Ou algo mais complexo, como redirecionar idiomas ausentes para uma URL personalizada.
Argumentos
- $empty_value
- (mixed) (Obrigatório) Normalmente, este é o valor que o filtro modificará. Não estamos filtrando nada aqui, portanto defina isso como NULL. Isso serve para que a função do filtro receba de fato a lista completa de argumentos
- $args
- (array|string) (Opcional) Argumentos para filtrar a saída de idiomas
- skip_missing(bool) Como tratar idiomas sem traduções.
1para pular o idioma ou0para criar um link para a página inicial do idioma em caso de traduções ausentes. - link_empty_to(string) Funciona em conjunto com skip_missing = 0 e permite usar links personalizados para os idiomas que não têm traduções para o elemento atual.
{%lang}pode ser usado como espaço reservado para o código do idioma. Vazio por padrão. - orderby(string) Aceita
id|code|nameO padrão é custom. A ordem personalizada pode ser definida no painel de administração do WordPress em WPML » Configurações » Seletores de idiomas » Opções do seletor de idiomas - order(string) Aceita
asc|desc
- skip_missing(bool) Como tratar idiomas sem traduções.
Exemplo de uso
Os argumentos do filtro podem ser passados para ele como uma string, como mostrado no primeiro exemplo abaixo. Eles também podem ser passados como um array, como você pode ver no segundo exemplo mais adiante.
No exemplo abaixo, exibimos um seletor de idiomas apenas com bandeiras. No entanto, há uma pequena diferença em relação ao seletor de idiomas apenas com bandeiras que você pode configurar nas “Configurações de idioma do WPML” no back-end do painel de administração.
A diferença aqui é que o idioma atual não será envolvido em uma âncora. Apenas os idiomas alternativos da página terão um link. Dê uma olhada.
Exemplo
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> ';
}
}
}
No próximo exemplo que você vê abaixo, redirecionamos os idiomas ausentes para uma página personalizada onde exibimos um formulário de contato para que as pessoas notifiquem o administrador do site sobre o conteúdo não traduzido.
Também colocamos em maiúscula o nome do idioma ativo, ou seja, o idioma que estamos visualizando no momento, usando a função
strtoupper do PHP.
Um segundo exemplo
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>';
}
}
}
Hooks relacionados
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