Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
This is the code used to generate the Event Schema for YoastCon
<?php
/**
* Adds Schema pieces to our output.
*
* @param array $pieces Graph pieces to output.
* @param \WPSEO_Schema_Context $context Object with context variables.
*
* @return array $pieces Graph pieces to output.
*/
function add_graph_pieces( $pieces, $context ): array {
$pieces[] = new YoastCon( $context );
return $pieces;
}
add_filter( 'wpseo_schema_graph_pieces', 'yoast_add_graph_pieces', 11, 2 );
<?php
use WPSEO_Schema_Context;
/**
* Class Event
*
* @package Yoast\YoastCom\Core\WordPress\Integration\YoastSEO
*/
class YoastCon implements \WPSEO_Graph_Piece {
/**
* A value object with context variables.
*
* @var \WPSEO_Schema_Context
*/
private $context;
/**
* The Event data.
*
* @var array
*/
private $data;
/**
* Event constructor.
*
* @param WPSEO_Schema_Context $context
*/
public function __construct( \WPSEO_Schema_Context $context ) {
$this->context = $context;
}
/**
* Determine whether we should output an Event piece.
*
* @return bool
*/
public function is_needed(): bool {
if ( ! is_page( 1376069 ) ) {
return false;
}
return true;
}
/**
* Generates our Event data.
*
* @return array
*/
public function generate() {
$this->data = [
'@type' => 'BusinessEvent',
'@id' => $this->context->canonical . '#yoastcon',
'mainEntityOfPage' => [ '@id' => $this->context->canonical . \WPSEO_Schema_IDs::WEBPAGE_HASH ],
'name' => get_post( $this->context->id )->post_title,
'description' => $this->context->description,
'organizer' => [ '@id' => $this->context->site_url . \WPSEO_Schema_IDs::ORGANIZATION_HASH ],
'startDate' => date( 'c', strtotime( '24 April 2020 08:00 CET' ) ),
'endDate' => date( 'c', strtotime( '24 April 2020 17:00 CET' ) ),
'url' => $this->context->canonical,
'image' => 'https://yoast.com/app/uploads/2019/10/YoastCon2020-600x338.png',
'location' => [
'@type' => 'Place',
'name' => 'Theater \'t Mozaïek',
'url' => 'https://www.mozaiekwijchen.nl/',
'address' => [
'@type' => 'PostalAddress',
'addressLocality' => 'Wijchen',
'addressRegion' => 'Gelderland',
'addressCountry' => 'The Netherlands',
'postalCode' => '6602 HX',
'streetAddress' => 'Campuslaan 6',
],
],
];
return $this->data;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment