WPML
Estado
Resuelto
Resuelto en
3.7.0

Resumen del problema

Desde WPML 3.6.3, algunos usuarios están experimentando redirecciones incorrectas del navegador cuando el Formato de URL de idioma está configurado en la página WPML -> Idiomas con la siguiente configuración:

  • Diferentes idiomas en directorios
  • Usar directorio para el idioma por defecto => activado

Solución alternativa

Este problema se resolverá en la próxima versión de WPML.

Mientras tanto, tenemos un parche que puede aplicar al archivo class-wpml-canonicals-hooks.php, ubicado en la carpeta ../wp-content/plugins/sitepress-multilingual-cms/classes/canonicals/.

Reemplace el siguiente bloque de código completo, alrededor de la línea 34:

public function redirect_pages_from_root_to_default_lang_dir() {
	if ( is_page() ) {
		$current_path   = wpml_parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
		$canonical_url  = get_permalink( get_queried_object_id() );
		$canonical_path = wpml_parse_url( $canonical_url, PHP_URL_PATH );
		$canonical_path = $this->get_paginated_canonical_path( $canonical_path );

		if ( $current_path !== $canonical_path ) {
			$current_query = wpml_parse_url( $_SERVER['REQUEST_URI'], PHP_URL_QUERY );
			parse_str( $current_query, $current_query_array );
			$canonical_url = add_query_arg( $current_query_array, $canonical_url );
			$this->sitepress->get_wp_api()->wp_safe_redirect( $canonical_url, 301 );
		}
	}
}

Por:

public function redirect_pages_from_root_to_default_lang_dir() {
    global $wpml_url_converter;
    if ( is_page() && ! WPML_Root_Page::is_current_request_root() ) {
        $lang = $this->sitepress->get_current_language();
        $current_uri = $_SERVER['REQUEST_URI'];
        $abs_home    = $wpml_url_converter->get_abs_home();
        $install_subdir = wpml_parse_url( $abs_home, PHP_URL_PATH );
        $actual_uri  = preg_replace( '#^' . $install_subdir . '#', '', $current_uri );
        $actual_uri  = '/' . ltrim( $actual_uri, '/' );

        if ( 0 !== strpos( $actual_uri, '/' . $lang . '/' ) ) {
            $canonical_uri = trailingslashit( $install_subdir ) . $lang . $actual_uri;
            $canonical_uri = user_trailingslashit( $canonical_uri );
            $this->sitepress->get_wp_api()->wp_safe_redirect( $canonical_uri, 301 );
        }
    }
}

Todos los problemas conocidos →