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' ),
Field::make( 'textarea', 'review_text', 'Текст отзыва:' )
->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', 'Выберите преподавателя:')
->set_width( 32 )
->set_types(array(

View File

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