- Статус
- Решено
- Решено в
- 1.2.0
- Связанный плагин/тема
- Yoast SEO
Обзор проблемы
После недавних крупных изменений в Yoast 14.x некоторые пользователи WPML замечают, что контент Yoast всегда генерируется на языке по умолчанию.
Например, на странице на дополнительном языке это могут быть теги «meta», такие как «og:title» или «og:description», либо URL-адреса в Ваших хлебных крошках.
У нас есть обходное решение, но из-за характера проблемы оно может подойти не всем. Мы работаем над устранением этой проблемы как можно скорее.
Если у Вас возникли проблемы с переводом контента Yoast, попробуйте предложенное ниже обходное решение и дождитесь следующего релиза Yoast Multilingual, прежде чем создавать запрос в службу поддержки.
Обходное решение
Добавьте в файл functions.php Вашей темы оформления следующий код:
if ( ! is_admin() ) {
add_filter( 'wpseo_title', 'wpml_wpseo_title', 10, 2 );
add_filter( 'wpseo_opengraph_title', 'wpml_wpseo_title', 10, 2 );
}
function wpml_wpseo_title( $title, $presentation ) {
switch ( $presentation->model->object_type ) {
case 'post-type-archive':
$key = 'title-ptarchive-' . $presentation->model->object_sub_type;
break;
case 'system-page':
$key = 'title-' . $presentation->model->object_sub_type . '-wpseo';
break;
default:
$key = false;
}
if ( $key ) {
$option = get_option( 'wpseo_titles' );
if ( isset( $option[ $key ] ) ) {
$title = wpseo_replace_vars( $option[ $key ], $presentation );
}
}
return $title;
}
if ( ! is_admin() ) {
add_filter( 'wpseo_metadesc', 'wpml_wpseo_desc', 10, 2 );
add_filter( 'wpseo_opengraph_desc', 'wpml_wpseo_desc', 10, 2 );
}
function wpml_wpseo_desc( $title, $presentation ) {
switch ( $presentation->model->object_type ) {
case 'post-type-archive':
$key = 'metadesc-ptarchive-' . $presentation->model->object_sub_type;
break;
case 'system-page':
$key = 'metadesc-' . $presentation->model->object_sub_type . '-wpseo';
break;
default:
$key = false;
}
if ( $key ) {
$option = get_option( 'wpseo_titles' );
if ( isset( $option[ $key ] ) ) {
$title = wpseo_replace_vars( $option[ $key ], $presentation );
}
}
return $title;
}
add_filter( 'wpseo_save_indexable', function( $indexable ) {
$args = [
'element_id' => $indexable->object_id,
'element_type' => $indexable->object_type,
];
$language_code = apply_filters( 'wpml_element_language_code', false, $args );
$indexable->permalink = apply_filters( 'wpml_permalink', $indexable->permalink, $language_code, true );
return $indexable;
} );
После добавления кода установите плагин Yoast Test Helper.
Перейдите в Инструменты > Yoast Test и нажмите «Reset Indexables tables & migrations».
Наконец, перейдите в Консоль и нажмите на уведомление в админ-панели, которое предлагает Вам проиндексировать сайт.
Если у Вас есть вопросы или Вы хотите сообщить о связанной проблеме, пожалуйста, упомяните эту известную проблему, чтобы наша команда могла оказать Вам эффективную поддержку.