-
" . esc_html($questions_question) . "
+
+ " . esc_html($questions_question) . "
-
-
" . wp_kses_post($questions_answer) . "
+
+
" . wp_kses_post($questions_answer) . "
";
if ($count % 2 === 0) {
@@ -806,6 +813,7 @@ if ( is_array( $programs ) ) {
}
$ev = array(
'@type' => 'Event',
+ 'eventStatus' => 'https://schema.org/EventScheduled',
'organizer' => array( '@id' => home_url('/') . '#organization' ),
'location' => array( '@id' => get_permalink( $post_id ) ),
);
@@ -817,12 +825,30 @@ if ( is_array( $programs ) ) {
}
if ( ! empty( $item['programs_date'] ) ) {
$raw = wp_strip_all_tags( $item['programs_date'] );
+ // ISO: 2025-05-26
if ( preg_match( '/(\d{4})-(\d{2})-(\d{2})/', $raw, $m ) ) {
$ev['startDate'] = $m[1] . '-' . $m[2] . '-' . $m[3];
+ // DD.MM.YYYY
} elseif ( preg_match( '/(\d{2})\.(\d{2})\.(\d{4})/', $raw, $m ) ) {
$ev['startDate'] = $m[3] . '-' . $m[2] . '-' . $m[1];
+ // Русские месяцы: "26–30 мая 2025" или "30 июня–4 июля 2025"
+ } elseif ( preg_match( '/(\d{1,2})\s*(?:[–—\-]|\s*–\s*)\d{1,2}\s+([а-яё]+)/ui', $raw, $m )
+ || preg_match( '/(\d{1,2})\s+([а-яё]+)\s*[–—\-]/ui', $raw, $m )
+ || preg_match( '/(\d{1,2})\s+([а-яё]+)\s+\d{4}/ui', $raw, $m ) ) {
+ $ru_months = array(
+ 'января' => '01', 'февраля' => '02', 'марта' => '03',
+ 'апреля' => '04', 'мая' => '05', 'июня' => '06',
+ 'июля' => '07', 'августа' => '08', 'сентября' => '09',
+ 'октября' => '10', 'ноября' => '11', 'декабря' => '12',
+ );
+ $month_name = mb_strtolower( trim( $m[2] ) );
+ if ( isset( $ru_months[ $month_name ] ) ) {
+ preg_match( '/(\d{4})/u', $raw, $y );
+ $ev['startDate'] = ( $y[1] ?? date('Y') ) . '-' . $ru_months[ $month_name ] . '-' . str_pad( $m[1], 2, '0', STR_PAD_LEFT );
+ }
+ // Fallback: только год
} elseif ( preg_match( '/\d{4}/', $raw, $y ) ) {
- $ev['startDate'] = $y[0];
+ $ev['startDate'] = $y[0] . '-06-01';
}
if ( isset( $ev['description'] ) && $ev['description'] ) {
$ev['description'] .= ' — ' . $raw;
@@ -951,12 +977,17 @@ $organization = array(
'name' => $jsonld_name,
'url' => home_url('/'),
);
+if ( $jsonld_img_url ) {
+ $organization['logo'] = $jsonld_img_url;
+}
if ( ! empty( $jsonld_social ) ) {
$organization['sameAs'] = $jsonld_social;
}
+if ( $agg_rating ) {
+ $localbusiness['aggregateRating'] = $agg_rating;
+}
$ld_graph = array_merge( array( $localbusiness, $organization ), $ld_events, $ld_faq );
-if ( $agg_rating ) $ld_graph[] = $agg_rating;
if ( ! empty( $ld_graph ) ) {
$jsonld_data = array(