- Статус
- Решено
- Заявлено для
- WPML Multilingual CMS 3.8.3
- Решено в
- 3.9.0
Обзор проблемы
Если язык имеет двухбуквенный код в теге и более длинный код в локали по умолчанию, последний используется для формирования тегов hreflang.
Обходное решение
Исправление будет выпущено в следующей основной версии WPML, где слово «tag» будет заменено на «hreflang» во избежание путаницы и будет использоваться правильная логика.
Тем временем Вы можете выполнить следующие действия для решения этой проблемы:
- Сделайте резервную копию Вашего сайта.
- Найдите и отредактируйте файл class-wpml-seo-headlangs.php в папке ../sitepress-multilingual-cms/classes/seo/, где 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 ''; }