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. Esse filtro geralmente é usado para criar seletores de idiomas personalizados.
Este filtro só pode funcionar quando o objeto global $wp_query tiver sido instanciado. Isso significa que ele deve ser chamado depois que a ação wp ocorrer.
O WPML retorna os idiomas ativos (ativados) de um site como um array com informações relativas por idioma. Por exemplo, para um site WordPress que usa inglês, francês e italiano, o hook retornará isto:
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 ) )
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 um URL personalizado.
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 → 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'] ) . '">';
echo '<img src="' . esc_url ( $l['country_flag_url'] ) . '" height="12" alt="' . esc_attr( $l['language_code'] ) . '" width="18" />';
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