WPML

Tổng quan về sự cố

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

Sự cố này đã được khắc phục trong WPML 4.6.9. Việc cập nhật giải quyết vấn đề này trên trang web của bạn, vì vậy bạn chỉ cần giải pháp tạm thời này nếu chưa thể cập nhật.

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

Tất cả lỗi đã ghi nhận

Vẫn gặp sự cố này?

Nếu việc cập nhật không khắc phục được, hãy đặt một câu hỏi hỗ trợ và chúng tôi sẽ cùng bạn xem xét.