Замена мета-тегов — title, meta description нужна для улучшения и сео-оптимизации сайта на CMS WordPress. Часто возникает необходимость массовой, автоматической замены или какой-либо манипуляции с ними. Использование плагинов, таких как «Yoast SEO» упрощает задачу, но не решает полностью.
Используем плагин Yoast SEO
Если используется плагин Yoast SEO, то у него есть хуки wpseo_title
и wpseo_metadesc
. На них можно подвесить функции редактирования:
// wpseo_title
add_filter('wpseo_title', function($title) {
if (is_page([ 'parent-slug/page-name', '/parent-slug/page-name/' ])) {
$title = 'Заголовок';
}
return $title;
}, 10, 1);
// wpseo_metadesc
add_filter('wpseo_metadesc', function($description) {
if (is_singular([ 'newspaper', 'book' ])) {
$description = 'Описание страницы';
}
return $description;
}, 10, 1);
Можно использовать и другие проверки (is_single, is_tag и т.д.) и вешать дополнительную логику для формирования мета-тегов.
Добавляем пагинацию в title и / или description
Плагин Yoast SEO имеет много разных переменных, которые вы можете добавлять в поля title и description. Например, для добавления в поле title для страниц пагинации текста «Страница 2 из 3» (page 2 of 4) достаточно вставить переменную %%page%%
Если надо больше свободы, можно использовать например, такую функцию:
function pagination_desc_modify($description) {
if (is_paged()) {
$description .= ' | ' . __('страница') . " " . (get_query_var('paged'));
}
return $description;
}
add_filter('wpseo_metadesc', 'pagination_desc_modify', 20, 1);
Meta-tag title без плагина
Манипуляцию с title в случае если по каким-то причинам не используется плагин лучше проводить через хук pre_get_document_title
add_filter( 'pre_get_document_title', function ( $title ) {
return 'Here is the new title';
}, 10, 1 );
Есть еще пара хуков в этой связи:
- document_title_parts
- document_title_separator
Хук document_title_parts
это передача и, соответственно возможность редактирования ассоциативного массива, так сказать, левой и правой части title:
array (
‘title’ => ‘Моя супер страница’,
’tagline’ => ‘Слоган моего сайта’
)
Хук document_title_separator
, как вы уже догадались, это возможность повлиять на разделитель для этих двух частей.
Meta-tag description без плагинов
Тут ситуация обстоит несколько иначе. Сам WordPress не создает этот мета-тег. И, соответственно, не существует поля для ввода СЕО-описания в административной части. Его можно создать с помощью плагина ACF (или самостоятельно). Далее, через хук wp_head сделать добавление мета-дескрипшен. Что-то типа:
add_action(‘wp_head’, function() {
if ( get_field(‘description’) ) {
echo "<meta name=\"description\" content=\"" . get_field(‘description’) . "\" />";
}
});
Можно еще добавить туда свой хук с помощью apply_filters( $tag, $value ) для облегчения жизни в будущем.