apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
- Tipo
- filter
- Categoría
- Información de idioma de todo el sitio
- 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 ) )
url. Nunca la construya a partir de language_code. El alemán mencionado arriba tiene el código de y la dirección /de-de/. WPML califica el código de la URL cuando usted añade dos países de un mismo idioma en el mismo paso, el propietario del sitio también puede editarlo, y en el modo de dominio la dirección es el dominio que escribió el propietario.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-usode-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 usarendonde un sitio nuevo usaen-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_codecuando 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>.svgpara un idioma con país, yres/flags/language/<code>.svgpara un idioma sin país. Una bandera personalizada proviene de la carpeta de subidas. Nunca construya la ruta usted mismo:res/flags/sv.svges la bandera de Suecia, yres/flags/country/sv.svges 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.
1para omitir el idioma o0para 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
- skip_missing(bool) Cómo tratar los idiomas sin traducciones.
Ejemplo de uso
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>';
}
}
}
Hooks relacionados
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