- Trạng thái
- Đã giải quyết
- Được báo cáo cho
- WPML Multilingual CMS 4.6.8
- Đã giải quyết trong
- WPML 4.6.9
- Thẻ chủ đề
- Bug
Tổng quan về lỗi
Người dùng cài đặt WordPress trong một thư mục con và sử dụng tính năng Sử dụng thư mục cho ngôn ngữ mặc định của WPML đang gặp phải tình trạng tạo URL không chính xác cho các lưu trữ phân loại và liên kết loại nội dung tùy chỉnh. Điều này dẫn đến các đường dẫn bị nhân đôi trong URL và hậu quả là lỗi 404 khi cố gắng truy cập vào các trang này.
Ví dụ: bạn sẽ được chuyển hướng đến http://www.domain.com/subfolder/en/subfolder/en/category/new-category/ thay vì http://www.domain.com/subfolder/en/category/new-category/.
Giải pháp tạm thời
Vui lòng đảm bảo bạn đã tạo bản sao lưu đầy đủ cho trang web của mình trước khi tiếp tục.
- Mở tệp …/wp-content/plugins/sitepress-multilingual-cms/classes/canonicals/class-wpml-canonicals-hooks.php.
- Tìm dòng 87.
- Thay đổi:
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 ); } - Thành:
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 ); } }