Изменить описание в микроразметке WP Postrating

Гость | 10 марта 2017, 16:01 | 1

Установил плагин 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, а внутри прописать:

1
2
3
4
5
6
7
8
9
10
11
12
// Прописываем в 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. Сохраняем там же

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 меняете на свой)