WPML
상태
해결됨
보고된 제품
WPML Multilingual CMS 3.8.3
해결된 버전
3.9.0

문제 개요

언어의 태그에 두 자리 코드가 있고 기본 로캘에 더 긴 코드가 있는 경우, 후자가 hreflang 태그를 렌더링하는 데 사용됩니다.

임시 해결 방법

WPML의 다음 주요 버전에서 수정 사항이 제공되며, 혼동을 피하기 위해 “tag”라는 단어가 “hreflang”으로 대체되고 올바른 로직이 사용됩니다.

그동안 다음 단계에 따라 이 문제를 해결할 수 있습니다:


  1. 사이트를 백업하세요.

  2. ../sitepress-multilingual-cms/classes/seo/ 폴더에서 class-wpml-seo-headlangs.php 파일을 찾아 편집하세요(여기서 sitepress-multilingual-cms는 WPML이 설치된 디렉터리입니다).

  3. 대략 139번째 줄에서 다음 코드를 찾을 수 있습니다:
    private function get_hreflang_code( $lang ) {
    	$tag           = $lang['tag'];
    	$locale        = $lang['default_locale'];
    	$hreflang_code = $this->get_best_code( array( $tag, $locale ) );
    	$hreflang_code = str_replace( '_', '-', $hreflang_code );
    	$hreflang_code = strtolower( $hreflang_code );
    
    	if ( $this->is_valid_hreflang_code( $hreflang_code ) ) {
    		return trim( $hreflang_code );
    	}
    
    	return '';
    }


  4. 이 코드를 다음 코드로 교체하세요:
    private function get_hreflang_code( $lang ) {
    	$ordered_keys = array( 'tag', 'default_locale' );
    
    	$hreflang_code = '';
    	foreach ( $ordered_keys as $key ) {
    		if ( array_key_exists( $key, $lang ) && trim( $lang[ $key ] ) ) {
    			$hreflang_code = $lang[ $key ];
    			break;
    		}
    	}
    
    	$hreflang_code = strtolower( str_replace( '_', '-', $hreflang_code ) );
    
    	if ( $this->is_valid_hreflang_code( $hreflang_code ) ) {
    		return trim( $hreflang_code );
    	}
    
    	return '';
    }

알려진 모든 문제 →