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 );
    		}
    	}

جميع المشاكل المعروفة →