license->hasCoreFeature( 'schema', 'event' ) ) { return []; } $data = [ '@type' => ! empty( $graphData->properties->eventType ) ? $graphData->properties->eventType : 'Event', '@id' => ! empty( $graphData->id ) ? aioseo()->schema->context['url'] . $graphData->id : aioseo()->schema->context['url'] . '#event', 'name' => ! empty( $graphData->properties->name ) ? $graphData->properties->name : get_the_title(), 'description' => ! empty( $graphData->properties->description ) ? $graphData->properties->description : '', 'eventStatus' => ! empty( $graphData->properties->status ) ? 'https://schema.org/' . $graphData->properties->status : 'https://schema.org/EventScheduled', 'eventAttendanceMode' => ! empty( $graphData->properties->attendanceMode ) ? 'https://schema.org/' . $graphData->properties->attendanceMode : 'https://schema.org/OfflineEventAttendanceMode', // phpcs:ignore Generic.Files.LineLength.MaxExceeded 'startDate' => ! empty( $graphData->properties->dates->startDate ) ? mysql2date( DATE_W3C, $graphData->properties->dates->startDate, false ) : '', 'endDate' => ! empty( $graphData->properties->dates->endDate ) ? mysql2date( DATE_W3C, $graphData->properties->dates->endDate, false ) : '', 'location' => [], 'offers' => [], 'organizer' => [], 'performer' => [], 'image' => [] ]; if ( ! empty( $graphData->properties->location ) ) { $data['location'] = [ '@type' => 'Place', 'name' => ! empty( $graphData->properties->location->name ) ? $graphData->properties->location->name : '', 'url' => ! empty( $graphData->properties->location->url ) ? $graphData->properties->location->url : '', 'address' => [ 'streetAddress' => ! empty( $graphData->properties->location->streetAddress ) ? $graphData->properties->location->streetAddress : '', 'addressLocality' => ! empty( $graphData->properties->location->locality ) ? $graphData->properties->location->locality : '', 'postalCode' => ! empty( $graphData->properties->location->postalCode ) ? $graphData->properties->location->postalCode : '', 'addressRegion' => ! empty( $graphData->properties->location->region ) ? $graphData->properties->location->region : '', 'addressCountry' => ! empty( $graphData->properties->location->country ) ? $graphData->properties->location->country : '' ] ]; } if ( ! empty( $graphData->properties->offer ) ) { $data['offers'] = [ '@type' => 'Offer', 'url' => ! empty( $graphData->properties->offer->url ) ? $graphData->properties->offer->url : '', 'price' => ! empty( $graphData->properties->offer->price ) ? (float) $graphData->properties->offer->price : 0, 'priceCurrency' => ! empty( $graphData->properties->offer->currency ) ? $graphData->properties->offer->currency : '', 'validFrom' => ! empty( $graphData->properties->offer->validFrom ) ? aioseo()->helpers->dateToIso8601( $graphData->properties->offer->validFrom ) : '', 'availability' => ! empty( $graphData->properties->offer->availability ) ? $graphData->properties->offer->availability : 'https://schema.org/InStock' ]; } if ( ! empty( $graphData->properties->organizer->type ) ) { $data['organizer'] = [ '@type' => $graphData->properties->organizer->type, 'name' => $graphData->properties->organizer->name, 'url' => $graphData->properties->organizer->url ]; // If name is empty and the type is organization, fall back to the global one. if ( empty( $graphData->properties->organizer->name ) && 'Organization' === $graphData->properties->organizer->type && 'organization' === aioseo()->options->searchAppearance->global->schema->siteRepresents ) { $homeUrl = trailingslashit( home_url() ); $data['organizer'] = [ '@type' => 'Organization', '@id' => $homeUrl . '#organization', ]; } } if ( ! empty( $graphData->properties->performer->type ) && ! empty( $graphData->properties->performer->name ) ) { $data['performer'] = [ '@type' => $graphData->properties->performer->type, 'name' => $graphData->properties->performer->name, 'url' => $graphData->properties->performer->url ]; } if ( ! empty( $graphData->properties->images ) ) { foreach ( $graphData->properties->images as $image ) { if ( empty( $image->url ) ) { continue; } $data['image'][] = $this->image( $image->url ); } } if ( ! empty( $graphData->properties->review->rating ) && ! empty( $graphData->properties->review->author ) && ! empty( $graphData->properties->rating->minimum ) && ! empty( $graphData->properties->rating->maximum ) ) { $data['review'] = [ '@type' => 'Review', 'headline' => $graphData->properties->review->headline, 'reviewBody' => $graphData->properties->review->content, 'reviewRating' => [ '@type' => 'Rating', 'ratingValue' => (float) $graphData->properties->review->rating, 'worstRating' => (float) $graphData->properties->rating->minimum, 'bestRating' => (float) $graphData->properties->rating->maximum ], 'author' => [ '@type' => 'Person', 'name' => $graphData->properties->review->author ] ]; $data['aggregateRating'] = [ '@type' => 'AggregateRating', 'ratingValue' => (float) $graphData->properties->review->rating, 'worstRating' => (float) $graphData->properties->rating->minimum, 'bestRating' => (float) $graphData->properties->rating->maximum, 'reviewCount' => 1 ]; } return $data; } }