WPML

문제 개요

하위 폴더에 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/ 경로로 리디렉션됩니다.

임시 해결 방법

이 문제는 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 );
    	}
    }

모든 알려진 문제

여전히 이 문제가 발생합니까?

업데이트해도 문제가 해결되지 않으면 지원 문의를 하세요. 함께 살펴보겠습니다.