WPML
apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
Tipo
filter
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. 1 para pular o idioma ou 0 para 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|name O 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

Exemplo de uso

Lembre-se de fazer o escape de qualquer saída. Consulte a página sobre sanitização/escape de dados para saber mais sobre as práticas recomendadas.

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>';
        }
    }
}

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

Todos os 29 hooks de Informações de idioma de todo o site →