Немного лирики: я довольно долго бодаюсь с yoast и, к сожалению, дока и качество исходников оставляют желать лучшего, к тому же они могут их переписывать — сегодня у вас данные в одной таблице лежат, а завтра уже в другой. К тому же, у них просто невероятное количество кода, как для плагина который просто выводит десяток мета-тегов. Надеюсь в обозримом будущем SEO добавят в ядро и я смогу отказаться от этого недоразумения)
Ближе к делу: перебирая разные варианты работы с yoast я в конце концов остановился на том, что при установке меняю все поля "SEO-заголовок" и "Мета-описание" в разделе "Отображение в поисковой выдаче" на
%%InsteadTitle%%
и
%%InsteadDescription%%
После чего подключаю свой файл в тему, где создаю эти переменные и собираю их так, как мне нужно — чаще всего заголовки и описания берутся из
excel или лежат в пост-мете (даты проведения мероприятия, характеристики товара). Болванка выглядит так:
// Заголовки
function get_seo_instead_title() {
$string = '';
if ( is_archive() ) {
// берем сео-заголовки из excel-таблицы
}
if ( is_single() ) {
// собираем сео-заголовки из get_the_title() и get_post_meta()
}
if ( $string == '' ) {
if ( is_home() || is_front_page() ) {
$string = get_bloginfo( 'name' ) . ' — ' . get_bloginfo( 'description' );
} elseif ( is_post_type_archive() ) {
$string = get_queried_object()->label;
} elseif ( is_archive() ) {
$string = get_queried_object()->name;
} else {
$string = get_the_title();
}
}
return $string;
}
// Описания
function get_seo_instead_description() {
$string = '';
if ( is_single() ) $string = get_the_excerpt();
if ( $string == '' ) {
$string = 'Какое-то дефолтное описание для всех страниц, если его нет';
}
return $string;
}
// Регистрируем переменные
function register_custom_yoast_variables() {
wpseo_register_var_replacement( '%%InsteadTitle%%', 'get_seo_instead_title', 'advanced', 'Some instead title text' );
wpseo_register_var_replacement( '%%InsteadDescription%%', 'get_seo_instead_description', 'advanced', 'Some instead title text' );
}
// Add action
add_action('wpseo_register_extra_replacements', 'register_custom_yoast_variables');