Изменить описание в микроразметке 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 меняете на свой)