do_action( 'wpml_switch_language', string $language_code )
- Tipo
- action
- Versión de WPML
- 3.2.2
Descripción
Este hook de acción establece el idioma que usa WPML para filtrar las consultas a la base de datos. Funciona como un ámbito: un código de idioma abre el ámbito y null lo cierra.
Los cambios se anidan. Desde WPML 5.0, WPML mantiene los cambios abiertos en una pila. Cada llamada con un código de idioma abre un nuevo ámbito. Una llamada con null cierra el último ámbito que sigue abierto y devuelve el idioma al código circundante. Por lo tanto, null restaura el idioma de su propio cambio, no el idioma en el que comenzó la petición. Ambos son iguales solo cuando su cambio es el único abierto. Cuando no hay ningún ámbito abierto, WPML vuelve al idioma que tenía la petición antes de su primer cambio.
Cada cambio necesita su propia restauración. Empareje cada llamada que abre un ámbito con una llamada que pasa null. Ponga la restauración en un bloque finally, para que también se ejecute cuando su código lance una excepción. Si deja un ámbito abierto, el resto de la petición se ejecuta en su idioma, y WPML sigue informando que el idioma está cambiado.
No restaure indicando el nombre del idioma del que proviene. Un código de idioma siempre abre un ámbito. WPML nunca lo interpreta como una restauración. Una llamada como do_action( 'wpml_switch_language', $previous_language ) abre un segundo ámbito en lugar de cerrar el primero. Esto es difícil de ver, porque el idioma actual es correcto justo después del par. El problema aparece más tarde en la petición: el ámbito que dejó abierto es cerrado por la siguiente restauración en el código circundante, y ese código luego se ejecuta en el idioma equivocado. Suele notarse en los correos electrónicos, las respuestas REST y las pantallas del panel de administración. Este patrón era correcto en WPML 4.x, que usaba un espacio compartido en lugar de una pila. Si su plugin todavía lo usa, consulte Restaurar el idioma por su nombre deja a WPML cambiado.
Cambie una consulta a la vez. Ejecute su consulta entre el cambio y la restauración. No cambie el idioma en pre_get_posts (se abre en una pestaña nueva): ese callback termina antes de que se ejecute la consulta, por lo que no tiene dónde cerrar el ámbito.
Argumentos
- $language_code
- (cadena) (Obligatorio) El código de idioma de 2 letras (o más) al que cambiar. Si se establece en null, restaura el idioma original. Si se establece en «all», consultará el contenido de todos los idiomas activos. El valor predeterminado es null
Ejemplo de uso
En el siguiente ejemplo, observe el uso de etiquetas condicionales para controlar la consulta específica de WordPress que queremos. Para obtener información adicional sobre el uso de condicionales, consulte la página pre_get_posts en el Codex de WordPress.
Ejemplo
// using the hook on a custom query on the WordPress index front end page
function my_custom_something($query) {
if ( !is_admin() && is_index() && !$query->is_main_query() ) {
do_action( 'wpml_switch_language', "de" );
}
}
add_action('pre_get_posts', 'my_custom_something');
Hooks relacionados
wpml_post_language_details, wpml_switch_language_for_email, wpml_restore_language_from_email, wpml_element_language_code, wpml_element_language_details
Todos los 6 hooks de Recuperar información de idioma para el contenido