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;
}
}
@helloromero

This comment has been minimized.

Copy link

@helloromero helloromero commented Jul 10, 2020

Thanks for the example code. Works perfect.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment