WPML
apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
Type
filter
Version de WPML
3.2

Description

Filtre la liste des langues activées (actives) pour un site. Ce filtre est généralement utilisé pour créer des sélecteurs de langue personnalisés.

Ce filtre ne peut fonctionner que lorsque l’objet global $wp_query (s'ouvre dans un nouvel onglet) a été instancié. Cela signifie qu’il doit être appelé après l’exécution de l’action wp (s'ouvre dans un nouvel onglet).

WPML renvoie les langues actives (activées) d’un site sous forme de tableau, avec des informations sur chaque langue. L’exemple ci-dessous provient d’un site WPML 5.0. Sa langue par défaut est l’anglais (États-Unis), l’allemand est servi à /de-de/, et l’arabe est servi à /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
  )
)

Les clés dans WPML 5.0

  • language_code est le code stocké. Une langue qui comporte un pays a le pays dans le code, par exemple en-us ou de-at. L’allemand, l’espagnol, le français, l’italien et le néerlandais conservent le code simple pour leur pays d’origine (de, es, fr, it, nl). Le portugais et le chinois comportent toujours un pays. L’arabe et d’autres langues à pays unique n’en comportent aucun. Une langue conserve le code avec lequel elle a été créée, de sorte qu’un site mis à niveau peut utiliser en là où un nouveau site utilise en-us.
  • country est le code pays de la langue. Il est vide pour une langue sans pays.
  • display_code est le code que WPML utilise dans les URL. Il diffère de language_code lorsque WPML qualifie le code, ou lorsque le propriétaire du site le modifie. Pour lire la même correspondance dans votre propre code, utilisez le filtre wpml_language_codes_map.
  • country_flag_url est l’URL du drapeau. Il s’agit d’une chaîne vide lorsque le site affiche le code de langue au lieu d’un drapeau, testez donc la valeur avant de l’afficher. Les drapeaux fournis par WPML sont res/flags/country/<country>.svg pour une langue avec un pays, et res/flags/language/<code>.svg pour une langue sans pays. Un drapeau personnalisé provient du dossier des téléversements. Ne construisez jamais le chemin vous-même : res/flags/sv.svg est le drapeau de la Suède, et res/flags/country/sv.svg est le drapeau du Salvador.

Sur un site qui n’a pas terminé la mise à niveau de WPML, country peut être NULL et display_code peut être absent. Utilisez isset() avant de les lire.

Le filtre wpml_active_languages offre un moyen de faire des choses comme réordonner le tableau des langues. Ou quelque chose de plus complexe, comme rediriger les langues manquantes vers une URL personnalisée.

Arguments

$empty_value
(mixed) (Requis) Il s’agit normalement de la valeur que le filtre va modifier. Nous ne filtrons rien ici, définissez donc cette valeur sur NULL. Cela permet à la fonction de filtre de recevoir réellement la liste complète des arguments.
$args
(array|string) (Facultatif) Arguments pour filtrer la sortie des langues.
  • skip_missing(bool) Comment traiter les langues sans traductions. 1 pour ignorer la langue ou 0 pour créer un lien vers l’accueil de la langue pour les traductions manquantes.
  • link_empty_to(string) Fonctionne en conjonction avec skip_missing = 0 et permet d’utiliser des liens personnalisés pour les langues qui n’ont pas de traductions pour l’élément actuel. {%lang} peut être utilisé comme espace réservé pour le code de la langue. Vide par défaut.
  • orderby(string) Accepte id|code|name. La valeur par défaut est custom. L’ordre personnalisé peut être défini dans l’interface d’administration de WordPress sous WPML » Paramètres » Sélecteurs de langue » Options du sélecteur de langue.
  • order(string) Accepte asc|desc.

Exemple d’utilisation

N’oubliez pas d’échapper toute sortie. Consultez la page sur le nettoyage/l’échappement des données (s'ouvre dans un nouvel onglet) pour en savoir plus sur les bonnes pratiques.

Les arguments du filtre peuvent lui être passés sous forme de string, comme indiqué dans le premier exemple ci-dessous. Ils peuvent également être passés sous forme d’array, comme vous pouvez le voir dans le deuxième exemple plus bas.

Dans l’exemple ci-dessous, nous affichons un sélecteur de langue avec uniquement des drapeaux. Cependant, il y a une petite différence par rapport au sélecteur de langue avec uniquement des drapeaux que vous pouvez configurer depuis vos « Paramètres de langue WPML » dans l’interface d’administration.

La différence ici est que la langue actuelle ne sera pas enveloppée dans une balise d’ancrage. Seules les langues alternatives de la page auront un lien. Jetez-y un œil.

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

Dans l’exemple suivant ci-dessous, nous redirigeons les langues manquantes vers une page personnalisée où nous affichons un formulaire de contact pour que les utilisateurs informent l’administrateur du site du contenu non traduit.
Nous mettons également en majuscule le nom de la langue active, c’est-à-dire la langue que nous sommes en train de consulter, en utilisant la fonction strtoupper de PHP.
Un deuxième exemple
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

Tous les 30 hooks de la catégorie Informations sur les langues à l’échelle du site