Изменить описание в микроразметке WP Postrating
Установил плагин WP Postrating для того, чтобы он прописывал микроразметку со звёздочками рейтинга http://schema.org/AggregateRating.
Всем устраивает, но вот проблема — он для <meta itemprop="description" content=""
берёт аннотацию post_exсerpt
. А он у меня не прописан, и вручную проходить по статьям очень долго.
А если не прописан excerpt, плагин берёт данные из начала текста статьи post_content
, а там у меня и шорткоды, и прочее, и всё нефильтрованно. Яндекс формирует из этого сниппет, из-за шоркодов сниппет становится корявым.
Можно ли как-нибудь изменить описание description
или массово добавить post_excerpt?
На сайте стоит Yoast SEO, может быть, можно брать описание из Yoast meta description
?
WordpressПлагины
Решения
Можно прописать в
functions.php
темы или создать файл/wp-content/mu-plugins/excerpt.php
, а внутри прописать:// Прописываем в excerpt описание из meta yoast desc
add_action(
'save_post'
,
function
(
$post_id
,
$post
) {
// Если это ревизия или запись ещё не опубликована, то ничего не делаем
if
( wp_is_post_revision(
$post_id
) ||
$post
-> post_status !=
'publish'
)
return
;
// Если у записи есть yoast meta description , сохраняем его в post_excerpt
if
(
$metadesc
= get_post_meta(
$post_id
,
'_yoast_wpseo_metadesc'
, 1 ) ) {
$post
-> post_excerpt =
$metadesc
;
}
}, 10, 2 );
Теперь, каждый раз, когда пост будет сохраняться или обновляться, в
post_excerpt
будет записываться текст из yoast description для статьи.А вот следующая вещь поможет пройтись по всем записям и прописать им пустые
excerpt
. Сохраняем там жеadd_action(
'admin_action_update_post_excerpt'
,
function
() {
// Добываем все записи
$p
= get_posts(
array
(
'posts_per_page'
=> -1,
) );
// Перебор записей
foreach
(
$p
as
$post
) {
// Если тип записи не 'post' или запись ещё не опубликована, то ничего не делаем
if
(
$post
-> post_type !=
'post'
||
$post
-> post_status !=
'publish'
)
return
;
// Если есть yoast metadesc , сохраняем его в post_excerpt
if
(
$metadesc
= get_post_meta(
$post
-> ID,
'_yoast_wpseo_metadesc'
, 1 ) ) {
// Обновляем данные записи в базе данных
wp_update_post(
array
(
'ID'
=>
$post
-> ID,
'post_excerpt'
=>
$metadesc
,
)
);
}
}
} );
Затем, открываем http://example.com/wp-admin/admin.php?action=update_post_excerpt и дожидаемся окончания процесса (example.com меняете на свой)