Tribe__Tickets__JSON_LD__Type
JSON_LD class used to register any other post type that is not an Event and has support for tickets
Source
File: src/Tribe/JSON_LD/Type.php
class Tribe__Tickets__JSON_LD__Type extends Tribe__JSON_LD__Abstract {
/**
* Function used to attach the hook into wp_head
*
* @since 4.7.1
*/
public static function hook() {
add_action( 'wp_head', array( self::instance(), 'markup' ) );
}
/**
* On PHP 5.2 the child class doesn't get spawned on the Parent one, so we don't have
* access to that information on the other side unless we pass it around as a param
* so we throw __CLASS__ to the parent::instance() method to be able to spawn new instance
* of this class and save on the parent::$instances variable.
*
* @since 4.7.1
*
* @return Tribe__Events__JSON_LD__Event
*/
public static function instance( $name = null ) {
return parent::instance( __CLASS__ );
}
/**
* Function called by the wp_head hook to attach the markup into the page if that's the case, once does the setup
* calls the parent method to do the work to generate the script.
*
* @since 4.7.1
*
* @param mixed|null $post The ID of the post or array of posts
* @param array $args The arguments used to register the data on this type
*
* @return mixed|void
*/
public function markup( $post = null, $args = array() ) {
// Is not a the single view of a post type
if ( ! is_singular() ) {
return;
}
$post_type = get_post_type();
// The post type is the Event type so this is done already not need to be done for this type
if ( class_exists( 'Tribe__Events__Main' ) && $post_type === Tribe__Events__Main::POSTTYPE ) {
return;
}
// Does this post has tickets?
if ( ! tribe_events_has_tickets( get_the_ID() ) ) {
return;
}
/**
* This will allow you to change the type for the Rich Snippet, by default it will use the type Product for
* any Post type or Page. If this is runs in a book post type the filter becomes something like.
*
* @example tribe_events_json_ld_book_type
*
* @see http://schema.org/Product
*
* @see https://developers.google.com/structured-data/rich-snippets/
*
* @since 4.7.1
*
* @param string $post_type The name fo the registered post type
*/
$this->type = apply_filters( "tribe_tickets_json_ld_{$post_type}_type", 'Product' );
parent::markup();
}
/**
* Fetches the JSON-LD data for this type of object
*
* @param int|WP_Post|null $post The post/event
* @param array $args
*
* @return array
*/
public function get_data( $posts = null, $args = array() ) {
// Fetch the global post object if no posts are provided
if ( ! is_array( $posts ) && empty( $posts ) ) {
$posts = array( $GLOBALS['post'] );
} else {
// If we only received a single post object, wrap it in an array
$posts = ( $posts instanceof WP_Post ) ? array( $posts ) : (array) $posts;
}
$return = array();
foreach ( $posts as $i => $post ) {
// We may have been passed a post ID - let's ensure we have the post object
if ( is_numeric( $post ) ) {
$post = get_post( $post );
}
// If we don't have a valid post object, skip to the next item
if ( ! $post instanceof WP_Post ) {
continue;
}
$data = parent::get_data( $post, $args );
// If we have an Empty data we just skip
if ( empty( $data ) ) {
continue;
}
// Fetch first key
$post_id = key( $data );
// Fetch first Value
$data = reset( $data );
$data = $this->apply_object_data_filter( $data, $args, $post );
$return[ $post_id ] = $data;
}
return $return;
}
}
Changelog
| Version | Description |
|---|---|
| 4.7.1 | Introduced. |
Methods
- get_data — Fetches the JSON-LD data for this type of object
- hook — Function used to attach the hook into wp_head
- instance — On PHP 5.2 the child class doesn't get spawned on the Parent one, so we don't have access to that information on the other side unless we pass it around as a param so we throw __CLASS__ to the parent::instance() method to be able to spawn new instance of this class and save on the parent::$instances variable.
- markup — Function called by the wp_head hook to attach the markup into the page if that's the case, once does the setup calls the parent method to do the work to generate the script.