סקירת התקלה
משתמשים ש־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 ); } }