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

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