WPML
apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
Tipo
filter
Versión de WPML
3.2

Descripción

Filtra la lista de los idiomas activados (activos) de un sitio. Este filtro suele utilizarse para crear selectores de idiomas personalizados.

Este filtro solo puede funcionar cuando se ha instanciado el objeto global $wp_query (se abre en una pestaña nueva). Esto significa que debe llamarse después de que ocurra la acción wp (se abre en una pestaña nueva).

WPML devuelve los idiomas activos (activados) de un sitio como un array, con información sobre cada idioma. El siguiente ejemplo proviene de un sitio con WPML 5.0. Su idioma predeterminado es el inglés (Estados Unidos), el alemán se sirve en /de-de/ y el árabe se sirve en /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
  )
)

Las claves en WPML 5.0

  • language_code es el código almacenado. Un idioma que lleva un país tiene el país en el código, por ejemplo en-us o de-at. El alemán, el español, el francés, el italiano y el neerlandés mantienen el código simple para su país de origen (de, es, fr, it, nl). El portugués y el chino siempre llevan un país. El árabe y otros idiomas de un solo país no llevan ninguno. Un idioma mantiene el código con el que se creó, por lo que un sitio actualizado puede usar en donde un sitio nuevo usa en-us.
  • country es el código de país del idioma. Está vacío para un idioma sin país.
  • display_code es el código que WPML usa en las URL. Difiere de language_code cuando WPML califica el código, o cuando el propietario del sitio lo edita. Para leer el mismo mapa en su propio código, use el filtro wpml_language_codes_map.
  • country_flag_url es la URL de la bandera. Es una cadena vacía cuando el sitio muestra el código del idioma en lugar de una bandera, así que compruebe el valor antes de imprimirlo. Las banderas propias de WPML son res/flags/country/<country>.svg para un idioma con país, y res/flags/language/<code>.svg para un idioma sin país. Una bandera personalizada proviene de la carpeta de subidas. Nunca construya la ruta usted mismo: res/flags/sv.svg es la bandera de Suecia, y res/flags/country/sv.svg es la bandera de El Salvador.

En un sitio que no ha finalizado la actualización de WPML, country puede ser NULL y display_code puede estar ausente. Use isset() antes de leerlos.

El filtro wpml_active_languages proporciona una forma de hacer cosas como reordenar el array de idiomas. O algo más complejo, como redirigir los idiomas que faltan a una URL personalizada.

Argumentos

$empty_value
(mixed) (Obligatorio) Normalmente, este es el valor que el filtro modificará. Aquí no estamos filtrando nada, así que establézcalo en NULL. Esto es para que la función del filtro reciba realmente la lista completa de argumentos.
$args
(array|string) (Opcional) Argumentos para filtrar la salida del idioma
  • skip_missing(bool) Cómo tratar los idiomas sin traducciones. 1 para omitir el idioma o 0 para enlazar a la página de inicio del idioma en caso de traducciones que faltan.
  • link_empty_to(string) Funciona en conjunto con skip_missing = 0 y permite usar enlaces personalizados para los idiomas que no tienen traducciones para el elemento actual. {%lang} se puede usar como marcador de posición para el código del idioma. Vacío de forma predeterminada.
  • orderby(string) Acepta id|code|name. El valor predeterminado es custom. El orden personalizado se puede definir en el panel de administración de WordPress en WPML » Configuración » Selectores de idiomas » Opciones del selector de idiomas
  • order(string) Acepta asc|desc

Ejemplo de uso

Recuerde escapar cualquier salida. Consulte la página sobre saneamiento/escape de datos (se abre en una pestaña nueva) para obtener más información sobre las mejores prácticas.

Los argumentos del filtro se le pueden pasar como una string (cadena), como se muestra en el primer ejemplo a continuación. También se pueden pasar como un array (matriz), como puede ver en el segundo ejemplo más abajo.

En el ejemplo a continuación, mostramos un selector de idiomas de solo bandera. Sin embargo, hay una pequeña diferencia con el selector de idiomas de solo bandera que puede configurar desde su «Configuración de idiomas de WPML» en el panel de administración.

La diferencia aquí es que el idioma actual no estará envuelto dentro de un ancla. Solo los idiomas alternativos de la página tendrán un enlace. Eche un vistazo.

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

En el siguiente ejemplo que ve a continuación, redirigimos los idiomas que faltan a una página personalizada donde mostramos un formulario de contacto para que las personas notifiquen al administrador del sitio sobre el contenido sin traducir.
También ponemos en mayúscula el nombre del idioma activo, es decir, el idioma que estamos viendo actualmente, utilizando la función strtoupper de PHP.
Un segundo ejemplo
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 los 30 hooks de Información de idioma de todo el sitio