- 상태
- 해결됨
- 보고된 제품
- WPML Multilingual CMS 3.8.3
- 해결된 버전
- 3.9.0
문제 개요
언어의 태그에 두 자리 코드가 있고 기본 로캘에 더 긴 코드가 있는 경우, 후자가 hreflang 태그를 렌더링하는 데 사용됩니다.
임시 해결 방법
WPML의 다음 주요 버전에서 수정 사항이 제공되며, 혼동을 피하기 위해 “tag”라는 단어가 “hreflang”으로 대체되고 올바른 로직이 사용됩니다.
그동안 다음 단계에 따라 이 문제를 해결할 수 있습니다:
- 사이트를 백업하세요.
- ../sitepress-multilingual-cms/classes/seo/ 폴더에서 class-wpml-seo-headlangs.php 파일을 찾아 편집하세요(여기서 sitepress-multilingual-cms는 WPML이 설치된 디렉터리입니다).
- 대략 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 ''; } - 이 코드를 다음 코드로 교체하세요:
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 ''; }