From 306346a72afedb92092877c4bf6b37a8d81bcc32 Mon Sep 17 00:00:00 2001 From: Dekart Deploy Bot Date: Sun, 28 Jun 2026 17:56:16 +0000 Subject: [PATCH] =?UTF-8?q?page-reviews.php=20-=20=D0=BC=D0=B8=D0=BA=D1=80?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=82=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wp-content/themes/dekart/functions.php | 7 ++++ wp-content/themes/dekart/page-reviews.php | 45 ++++++++++++++--------- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/wp-content/themes/dekart/functions.php b/wp-content/themes/dekart/functions.php index 9cf99cb..1034a0d 100644 --- a/wp-content/themes/dekart/functions.php +++ b/wp-content/themes/dekart/functions.php @@ -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( diff --git a/wp-content/themes/dekart/page-reviews.php b/wp-content/themes/dekart/page-reviews.php index 73373bd..c71be03 100644 --- a/wp-content/themes/dekart/page-reviews.php +++ b/wp-content/themes/dekart/page-reviews.php @@ -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; }