WPML
상태
해결됨
보고된 제품
WPML Multilingual CMS 4.6.8
해결된 버전
WPML 4.6.9
주제 태그
Bug

문제 개요

하위 폴더에 WordPress를 설치하고 WPML 기능인 기본 언어에 디렉토리 사용을 사용하는 사용자에게 택소노미 보관함 및 사용자 정의 글 유형 링크의 URL이 잘못 생성되는 문제가 발생하고 있습니다. 이로 인해 URL 경로가 중복되며, 결과적으로 해당 페이지에 접속할 때 404 오류가 발생합니다.

예를 들어 http://www.domain.com/subfolder/en/category/new-category/ 대신 http://www.domain.com/subfolder/en/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 );
    		}
    	}

알려진 모든 문제 →