WPML
apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
Tipo
filter
Versione di WPML
3.2

Descrizione

Filtra l’elenco delle lingue abilitate (attive) per un sito. Questo filtro viene solitamente utilizzato per creare selettori di lingua personalizzati.

Questo filtro può funzionare solo quando l’oggetto globale $wp_query è stato istanziato. Ciò significa che dovrebbe essere richiamato dopo l’esecuzione dell’azione wp.

WPML restituisce le lingue attive (abilitate) di un sito come un array con le relative informazioni per ogni lingua. Ad esempio, per un sito WordPress che utilizza inglese, francese e italiano, l’hook restituirà questo:

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

  )

)

Il filtro wpml_active_languages offre un modo per eseguire operazioni come riordinare l’array delle lingue. O qualcosa di più complesso, come reindirizzare le lingue mancanti a un URL personalizzato.

Argomenti

$empty_value
(mixed) (Obbligatorio) Normalmente, questo è il valore che il filtro modificherà. Qui non stiamo filtrando nulla, quindi impostalo su NULL. Questo serve affinché la funzione del filtro riceva effettivamente l’elenco completo degli argomenti.
$args
(array|string) (Opzionale) Argomenti per filtrare l’output delle lingue
  • skip_missing(bool) Come trattare le lingue senza traduzioni. 1 per saltare la lingua o 0 per collegare alla home della lingua in caso di traduzioni mancanti.
  • link_empty_to(string) Funziona insieme a skip_missing = 0 e permette di utilizzare link personalizzati per le lingue che non hanno traduzioni per l’elemento corrente. {%lang} può essere utilizzato come segnaposto per il codice della lingua. Vuoto per impostazione predefinita.
  • orderby(string) Accetta id|code|name. Il valore predefinito è custom. L’ordine personalizzato può essere definito nell’area di amministrazione di WordPress in WPML » Lingue » Opzioni del selettore di lingua.
  • order(string) Accetta asc|desc

Esempio di utilizzo

Ricorda di eseguire l’escape di qualsiasi output. Consulta la pagina sulla sanitizzazione/escape dei dati per saperne di più sulle best practice.

Gli argomenti del filtro possono essergli passati come stringa, come mostrato nel primo esempio qui sotto. Possono anche essere passati come array, come puoi vedere nel secondo esempio più in basso.

Nell’esempio seguente mostriamo un selettore di lingua con sole bandiere. Tuttavia, c’è una piccola differenza rispetto al selettore di lingua con sole bandiere che puoi configurare dalle tue “Impostazioni della lingua di WPML” nel back-end di amministrazione.

La differenza qui è che la lingua attuale non sarà racchiusa in un tag anchor. Solo le lingue alternative della pagina avranno un link. Dai un’occhiata.

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

Nel prossimo esempio che vedi qui sotto, reindirizziamo le lingue mancanti a una pagina personalizzata dove mostriamo un modulo di contatto, affinché le persone possano notificare all’amministratore del sito i contenuti non tradotti.
Mettiamo anche in maiuscolo il nome della lingua attiva (cioè la lingua che stiamo visualizzando attualmente), utilizzando la funzione strtoupper di PHP.
Un secondo esempio
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

Tutti i 29 hook della categoria Informazioni sulla lingua a livello di sito →