WPML
סטטוס
נפתר
דווח עבור
WPML Multilingual CMS 4.6.8
נפתר בגרסה
WPML 4.6.9
תגיות נושא
Bug

סקירה כללית של התקלה

משתמשים ש־WordPress מותקן אצלם בתיקיית משנה ומשתמשים בתכונה השתמש בספרייה עבור שפת ברירת מחדל של WPML נתקלים ביצירת URL שגויה עבור ארכיוני טקסונומיות וקישורים של סוגי תוכן מותאמים אישית. הדבר גורם לנתיבים כפולים ב־URL ולשגיאות 404 כתוצאה מכך בעת ניסיון לגשת לעמודים אלה.

לדוגמה, תופנה אל http://www.domain.com/subfolder/en/subfolder/en/category/new-category/ במקום ל־http://www.domain.com/subfolder/en/category/new-category/.

פתרון עוקף

אנא ודא שיש לך גיבוי מלא של האתר לפני שתמשיך.


  • פתח את הקובץ …/wp-content/plugins/sitepress-multilingual-cms/classes/canonicals/class-wpml-canonicals-hooks.php.

  • חפש את שורה 87.

  • שנה את:
    	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 );
    	}

  • ל:
    	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 );
    		}
    	}

כל התקלות הידועות →