page-reviews.php - микроразметка
This commit is contained in:
parent
866f5a8dc1
commit
306346a72a
@ -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(
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user