WPML
Status
Gelöst
Gemeldet für
WPML Multilingual CMS 4.6.8
Gelöst in
WPML 4.6.9
Themen-Tags
Bug

Ü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

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 →