page-reviews.php - микроразметка

This commit is contained in:
Dekart Deploy Bot 2026-06-28 17:56:16 +00:00
parent 866f5a8dc1
commit 306346a72a
2 changed files with 34 additions and 18 deletions

View File

@ -441,6 +441,13 @@ function add_carbon() {
->set_attribute( 'type', 'number' ), ->set_attribute( 'type', 'number' ),
Field::make( 'textarea', 'review_text', 'Текст отзыва:' ) Field::make( 'textarea', 'review_text', 'Текст отзыва:' )
->set_width( 100 ), ->set_width( 100 ),
Field::make( 'date', 'review_date', 'Дата отзыва' )
->set_storage_format( 'd.m.Y' )
->set_input_format( 'd.m.Y', 'd.m.Y' )
->set_picker_options( array(
'altInput' => false,
) )
->set_help_text( 'Дата отзыва. Формат: ДД.ММ.ГГГГ' ),
Field::make('association', 'review_teacher', 'Выберите преподавателя:') Field::make('association', 'review_teacher', 'Выберите преподавателя:')
->set_width( 32 ) ->set_width( 32 )
->set_types(array( ->set_types(array(

View File

@ -989,29 +989,40 @@ document.addEventListener('DOMContentLoaded', function () {
$ld_reviews = array(); $ld_reviews = array();
$agg_total_stars = 0; $agg_total_stars = 0;
$agg_review_cnt = 0; $agg_review_cnt = 0;
if ( ! empty( $reviews_cards ) && is_array( $reviews_cards ) ) {
foreach ( $reviews_cards as $card ) { // Динамическая загрузка отзывов из CPT reviews для Schema.org
$author = $card['review_author'] ?? ''; $reviews_query = new WP_Query( array(
$text = $card['review_text'] ?? ''; 'post_type' => 'reviews',
$stars = isset( $card['review_rating'] ) ? (int) $card['review_rating'] : 0; 'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'DESC',
) );
if ( $reviews_query->have_posts() ) {
foreach ( $reviews_query->posts as $review_post ) {
$text = carbon_get_post_meta( $review_post->ID, 'review_text' );
$stars = (int) carbon_get_post_meta( $review_post->ID, 'review_star' );
if ( ! $text ) { if ( ! $text ) {
continue; continue;
} }
if ( $stars > 0 ) { if ( $stars > 0 ) {
$agg_total_stars += $stars; $agg_total_stars += $stars;
$agg_review_cnt++; $agg_review_cnt++;
} }
$ld_review = array( $ld_review = array(
'@type' => 'Review', '@type' => 'Review',
'reviewBody' => wp_strip_all_tags( $text ), 'reviewBody' => wp_strip_all_tags( $text ),
'author' => array( 'author' => array(
'@type' => 'Person', '@type' => 'Person',
'name' => $author ?: 'Анонимно', 'name' => get_the_title( $review_post->ID ) ?: 'Анонимно',
), ),
'itemReviewed' => array( '@id' => home_url( '/' ) . '#organization' ), 'itemReviewed' => array( '@id' => home_url( '/' ) . '#organization' ),
); );
if ( $stars > 0 ) { if ( $stars > 0 ) {
$ld_review['reviewRating'] = array( $ld_review['reviewRating'] = array(
'@type' => 'Rating', '@type' => 'Rating',
@ -1021,19 +1032,21 @@ if ( ! empty( $reviews_cards ) && is_array( $reviews_cards ) ) {
); );
} }
// datePublished: сначала ищем CF review_date, иначе post_date
if ( ! empty( $card['review_date'] ) ) { $review_date_cf = carbon_get_post_meta( $review_post->ID, 'review_date' );
$review_date = $card['review_date']; if ( ! empty( $review_date_cf ) ) {
if ( preg_match( '/^(\d{2})\.(\d{2})\.(\d{4})$/', $review_date_cf, $m ) ) {
if ( preg_match( '/^(\d{2})\.(\d{2})\.(\d{4})$/', $review_date, $m ) ) { $review_date_cf = $m[3] . '-' . $m[2] . '-' . $m[1];
$review_date = $m[3] . '-' . $m[2] . '-' . $m[1];
} }
$ld_review['datePublished'] = $review_date; $ld_review['datePublished'] = $review_date_cf;
} else {
$ld_review['datePublished'] = get_the_date( 'Y-m-d', $review_post->ID );
} }
$ld_reviews[] = $ld_review; $ld_reviews[] = $ld_review;
} }
} }
wp_reset_postdata();
$agg_rating = null; $agg_rating = null;
if ( $agg_review_cnt > 0 ) { if ( $agg_review_cnt > 0 ) {
@ -1182,10 +1195,6 @@ $organization = array(
'areaServed' => $area_served, 'areaServed' => $area_served,
); );
if ( $branch_price_range ) {
$organization['priceRange'] = $branch_price_range;
}
if ( ! empty( $hours_spec ) ) { if ( ! empty( $hours_spec ) ) {
$organization['openingHoursSpecification'] = $hours_spec; $organization['openingHoursSpecification'] = $hours_spec;
} }