نظرة عامة على المشكلة
يواجه المستخدمون الذين قاموا بتثبيت 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/.
حل بديل مؤقت
تم إصلاح هذه المشكلة في WPML 4.6.9. يحل التحديث المشكلة على موقعك، لذا لا تحتاج إلى هذا الحل البديل المؤقت إلا إذا لم تتمكن من التحديث بعد.
تأكد من أخذ نسخة احتياطية كاملة لموقعك قبل المتابعة.
- افتح ملف …/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 ); } }