WPML

Übersicht über das Problem

Benutzer, die WordPress in einem Unterordner installiert haben und die WPML-Funktion Verzeichnis für Standardsprache verwenden nutzen, stellen eine fehlerhafte URL-Generierung für Taxonomie-Archive und Links von benutzerdefinierten Beitragstypen fest. Dies führt zu verdoppelten Pfaden in der URL und folglich zu 404-Fehlern beim Versuch, auf diese Seiten zuzugreifen.

Zum Beispiel werden Sie zu http://www.domain.com/subfolder/en/subfolder/en/category/new-category/ anstatt zu http://www.domain.com/subfolder/en/category/new-category/ weitergeleitet.

Problemumgehung

Dieses Problem ist in WPML 4.6.9 behoben. Ein Update behebt dies auf Ihrer Website, daher benötigen Sie diese Problemumgehung nur, wenn Sie noch nicht aktualisieren können.

Bitte vergewissern Sie sich, dass Sie über ein vollständiges Backup Ihrer Website verfügen, bevor Sie fortfahren.

  • Öffnen Sie die Datei …/wp-content/plugins/sitepress-multilingual-cms/classes/canonicals/class-wpml-canonicals-hooks.php.
  • Suchen Sie nach Zeile 87.
  • Ändern Sie:
    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 );
    }
  • in:
    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 );
    	}
    }

Alle bekannten Probleme

Tritt dieses Problem weiterhin auf?

Wenn das Update das Problem nicht behebt, stellen Sie eine Support-Anfrage und wir sehen uns das gemeinsam mit Ihnen an.