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 funziona solo quando l’oggetto globale $wp_query (si apre in una nuova scheda) è stato istanziato. Ciò significa che dovrebbe essere richiamato dopo l’esecuzione dell’azione wp (si apre in una nuova scheda).

WPML restituisce le lingue attive (abilitate) di un sito come array, con informazioni su ciascuna lingua. L’esempio seguente proviene da un sito WPML 5.0. La sua lingua predefinita è l’inglese (Stati Uniti), il tedesco viene servito su /de-de/ e l’arabo viene servito su /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
  )
)

Le chiavi in WPML 5.0

  • language_code è il codice memorizzato. Una lingua che include un paese ha il paese nel codice, ad esempio en-us o de-at. Il tedesco, lo spagnolo, il francese, l’italiano e l’olandese mantengono il codice semplice per il loro paese d’origine (de, es, fr, it, nl). Il portoghese e il cinese includono sempre un paese. L’arabo e altre lingue di un solo paese non ne includono nessuno. Una lingua mantiene il codice con cui è stata creata, quindi un sito che ha effettuato un upgrade può usare en dove un nuovo sito usa en-us.
  • country è il codice del paese della lingua. È vuoto per una lingua senza paese.
  • display_code è il codice che WPML usa negli URL. Differisce da language_code quando WPML qualifica il codice, o quando il proprietario del sito lo modifica. Per leggere la stessa mappa nel tuo codice, usa il filtro wpml_language_codes_map.
  • country_flag_url è l’URL della bandiera. È una stringa vuota quando il sito mostra il codice della lingua invece di una bandiera, quindi verifica il valore prima di stamparlo. Le bandiere di WPML sono res/flags/country/<country>.svg per una lingua con un paese e res/flags/language/<code>.svg per una lingua senza. Una bandiera personalizzata proviene dalla cartella degli upload. Non costruire mai il percorso manualmente: res/flags/sv.svg è la bandiera della Svezia e res/flags/country/sv.svg è la bandiera di El Salvador.

Su un sito che non ha completato l’upgrade di WPML, country può essere NULL e display_code può essere assente. Usa isset() prima di leggerli.

Il filtro wpml_active_languages fornisce 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 » Impostazioni » Selettori di lingua » 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 (si apre in una nuova scheda) 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'] ) . '">';
            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> ';
        }
    }
}

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 30 hook della categoria Informazioni sulla lingua a livello di sito