WPML

Resumen del problema

Los usuarios con WordPress instalado en una subcarpeta y que utilizan la función de WPML Usar directorio para el idioma por defecto están experimentando una generación de URL incorrecta para los archivos de taxonomías y los enlaces de tipos de contenido personalizados. Esto da como resultado rutas duplicadas en la URL y los consiguientes errores 404 al intentar acceder a estas páginas.

Por ejemplo, se le redirigirá a http://www.domain.com/subfolder/en/subfolder/en/category/new-category/ en lugar de a http://www.domain.com/subfolder/en/category/new-category/.

Solución alternativa

Este problema se ha solucionado en WPML 4.6.9. Actualizar lo soluciona en su sitio, por lo que solo necesita esta solución alternativa si aún no puede actualizar.

Asegúrese de tener una copia de seguridad completa de su sitio antes de continuar.

  • Abra el archivo …/wp-content/plugins/sitepress-multilingual-cms/classes/canonicals/class-wpml-canonicals-hooks.php.
  • Busque la línea 87.
  • Cambie:
    public function redirectArchivePageToDefaultLangDir() {
    	global $wp_query;
    
    	$isValidForRedirect = $wp_query->is_archive() && ! call_user_func( $this->is_current_request_root_callback );
    
    	if ( ! $isValidForRedirect ) {
    		return;
    	}
    
    	$currentUri = $_SERVER['REQUEST_URI'];
    	$lang       = $this->sitepress->get_current_language();
    
    	if ( 0 !== strpos( $currentUri, '/' . $lang ) ) {
    		$canonicalUri = user_trailingslashit(
    			$this->url_converter->get_abs_home() . '/' . $lang . $currentUri
    		);
    
    		$this->redirectTo( $canonicalUri );
    	}
    }
    
    private function redirectTo( $uri ) {
    	$this->sitepress->get_wp_api()->wp_safe_redirect( $uri, 301 );
    }
  • Por:
    public function redirectArchivePageToDefaultLangDir() {
    	global $wp_query;
    
    	$isValidForRedirect = $wp_query->is_archive() && ! call_user_func( $this->is_current_request_root_callback );
    
    	if ( ! $isValidForRedirect ) {
    		return;
    	}
    
    	$currentUri = $_SERVER['REQUEST_URI'];
    	$lang       = $this->sitepress->get_current_language();
    
    	if ( 0 !== strpos( $currentUri, '/' . $lang ) ) {
    		$realhome = get_option('siteurl');
    		$parsed = parse_url($realhome);
    		if (false !== strpos($currentUri, $parsed["path"])){
    			return;
    		} else {
    		$canonicalUri = user_trailingslashit(
    			$this->url_converter->get_abs_home() . '/' . $lang . $currentUri
    		);
    		}
    
    		$this->redirectTo( $canonicalUri );
    	}
    }

Todos los problemas conocidos

¿Sigue teniendo este problema?

Si actualizar no lo soluciona, haga una consulta de soporte y lo revisaremos con usted.