Изменить описание в микроразметке 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, а внутри прописать:

// Прописываем в 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 меняете на свой)