'https://schema.org', '@graph' => array_map(function ($meeting) use ($days_en, $website_timezone) { $meeting['time'] = DateTime::createFromFormat('H:i', $meeting['time']); $meeting['start_date'] = new DateTime('this ' . $days_en[$meeting['day']]); if (empty($meeting['end_time'])) { $meeting['end_time'] = $meeting['time']->modify('+1 hour'); } else { $meeting['end_time'] = DateTime::createFromFormat('H:i', $meeting['end_time']); } $timezone = $meeting['timezone'] ?? $website_timezone; $entry = [ '@type' => 'Event', 'name' => $meeting['name'], 'url' => @$meeting['url'], 'description' => tsml_meeting_types($meeting['types']), "eventSchedule" => [ "@type" => "Schedule", "repeatFrequency" => "P1W", "byDay" => "https://schema.org/" . $days_en[$meeting['day']], "startDate" => $meeting['start_date']->format('Y-m-d'), "startTime" => $meeting['time']->format('H:i'), "endTime" => $meeting['end_time']->format('H:i'), "scheduleTimezone" => $timezone ], 'location' => [ '@type' => 'Place', 'name' => @$meeting['location'], 'address' => @$meeting['formatted_address'], 'geo' => ('yes' == $meeting['approximate']) ? [ '@type' => 'GeoCircle', 'geoMidpoint' => [ '@type' => 'GeoCoordinates', 'latitude' => @$meeting['latitude'], 'longitude' => @$meeting['longitude'] ], 'geoRadius' => 50 ] : [ '@type' => 'GeoCoordinates', 'latitude' => @$meeting['latitude'], 'longitude' => @$meeting['longitude'] ] ] ]; if (!empty($meeting['group'])) { $entry['organizer'] = [ '@type' => 'Organization', 'name' => $meeting['group'], 'url' => @$meeting['group_url'], 'description' => @$meeting['group_notes'] ]; } if (!empty($meeting['location_notes'])) { $entry['location']['description'] = $meeting['location_notes']; } return $entry; }, array_values(array_filter($meetings, function ($meeting) { return !empty($meeting['name']) && isset($meeting['day']) && !empty($meeting['time']); }))), ]; ?>
meetings page.', '12-step-meeting-list'), esc_url(tsml_meetings_url()) ); ?>