- Статус
- Решено
- Заявлено для
- WPML Multilingual CMS 3.3.6
- Решено в
- 3.3.6
Обзор проблемы
Метатеги hreflang могут отсутствовать в заголовке страницы. Это происходит начиная с версии WPML 3.3.6 в сочетании с темами оформления или плагинами, которые загружают WPML слишком рано.
WPML должен добавлять теги <link hreflang=”lang”> в раздел заголовка Вашего сайта. Они отсутствуют на некоторых сайтах, использующих WPML 3.3.6 в сочетании с определенными плагинами или темами оформления. Проблема возникает из-за того, что WPML пытается вывести эти теги на раннем этапе формирования заголовка, но другие плагины вызывают состояние гонки, запуская WPML слишком рано. Вы можете получить электронное письмо от сервиса Google Webmaster с сообщением «Incorrect hreflang implementation».
Полное описание этого функционала приведено в руководстве Google по контенту для многоязычных и региональных URL-адресов.
Обходное решение
Чтобы исправить это в WPML 3.3.6:
- Откройте файл
sitepress-multilingual-cms/sitepress.class.php - Прокрутите этот файл до конца, где Вы должны увидеть следующее:

- Замените эту строку:
add_action( 'wp_head', array( $this, 'head_langs' ), 1 ); - На:
add_action( 'wp_head', array( $this, 'head_langs' ) ); - Окончательная версия этого кода должна выглядеть так:

- Сохраните файл
В следующей версии WPML будет применено это же исправление.
Код на шаге 3 предназначался для того, чтобы метатеги hreflang выводились как можно раньше, но это вызывает проблемы с некоторыми темами оформления и плагинами.
Если Вы по-прежнему хотите, чтобы метатеги hreflang выводились как можно раньше, Вы можете применить более сложное решение. Добавьте этот код в файл functions.php Вашей темы оформления:
function my_handle_head_hreflang() {
global $sitepress;
$settings = $sitepress->get_settings();
if ( $settings[ 'seo' ][ 'head_langs' ] ) {
remove_action( 'wp_head', array( $sitepress, 'head_langs' ) );
add_action( 'wp_head', array( $this, 'head_langs' ), 1 );
}
}
add_action('wpml_loaded', 'my_handle_head_hreflang');