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) para un sitio. Este filtro se usa normalmente para crear selectores de idiomas personalizados.
Este filtro solo puede funcionar cuando se ha instanciado el objeto global $wp_query. Esto significa que debe llamarse después de que se ejecute la acción wp.
WPML devuelve los idiomas activos (activados) de un sitio como un array con información relativa por idioma. Por ejemplo, para un sitio de WordPress que funciona en inglés, francés e italiano, el hook devolverá esto:
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 ) )
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 » 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'] ) . '">';
echo '<img src="' . esc_url ( $l['country_flag_url'] ) . '" height="12" alt="' . esc_attr( $l['language_code'] ) . '" width="18" />';
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