\WP_Stager_Integration\Component::render_event_tickets(): void
\WP_Stager_Integration\Component::render_event_tickets(): voidDescription
Render the event tickets component.
If no ticket shops have been configured, this method will render all of the event's ticket groups with external links to the Stager-hosted ticket shop / membership sales pages. If ticket shops have been configured, this method will either render the "Advanced" event widget or a link to the full-screen "Basic" widget on the order page, depending on the integration type of the ticket shop.
Returns:
void
Information
| File | class-component.php line 267 |
|---|
Full Code
/**
* Render the event tickets component.
*
* If no ticket shops have been configured, this method will render all of the event's ticket groups with external links to
* the Stager-hosted ticket shop / membership sales pages. If ticket shops have been configured, this method will either
* render the "Advanced" event widget or a link to the full-screen "Basic" widget on the order page, depending on the integration type of the ticket shop.
*
*
* @return void
*/
public static function render_event_tickets() {
// Get data
$event = (array) (Event::get_single_event_data() ?: array());
$event_ticket_groups = (array) ($event[ 'ticketGroups' ] ?? array());
// Bail if event has no tickets added
if ( ! $event_ticket_groups ) {
return;
}
$event_end = (string) ($event[ 'programEndAt' ] ?? '');
$event_status = (string) ($event[ 'status' ] ?? '');
$ticket_shop_id = (string) ($event[ 'shopId' ] ?? '');
$event_end_timestamp = (int) ($event_end ? strtotime( $event_end ) : 0);
$now = (int) wp_date( 'U' );
$heading_html = '<h2 class="wpstager-event-section__heading">' . esc_html__( 'Tickets', 'wp-stager-integration' ) . '</h2>';
// Bail if event is not yet confirmed
if ( Options::STAGER_EVENT_STATUS_CONFIRMED !== $event_status ) {
return;
}
// Bail if event has finished
if ( ! $event_end_timestamp || $now > $event_end_timestamp ) {
return;
}
// Render heading
echo wp_kses_post( $heading_html );
// Get ticket shop data
$ticket_shop = Options::has_ticket_shops() ? Ticket_Shop::get_ticket_shop( $ticket_shop_id ) : null;
$ticket_shop_integration_type = (string) ($ticket_shop ? $ticket_shop->get_integration_type() : '');
// Render "No tickets" message if event has no tickets, then bail
if ( ! $event_ticket_groups ) {
self::render( 'event-message-no-tickets', 'template-parts/event-page' );
return;
}
// Check if ticket shop was found
if ( $ticket_shop && 'basic' === $ticket_shop_integration_type ) {
// Render "buy ticket" button component for "basic" integration type, then bail
self::render( 'event-buy-tickets-button', 'template-parts/event-page', array(
'order_page_url' => $ticket_shop->get_order_page_url(),
) );
return;
} else if ( $ticket_shop && 'advanced' === $ticket_shop_integration_type ) {
// Render event ticket shop widget for "advanced" integration type, then bail
self::render_ticket_shop_widget_event();
return;
}
// Get data
$event_shop_url = (string) ($event[ 'publicationChannelTrackerUrl' ] ?? $event[ 'shopUrl' ] ?? '');
$event_membership_url = (string) ($event[ 'membershipSalesUrl' ] ?? '');
// Process ticket groups
$ticket_groups = array();
foreach ( $event_ticket_groups as $ticket_group ) {
// Get data
$name = (string) ($ticket_group[ 'name' ] ?? '');
$ticket_type = (string) ($ticket_group[ 'type' ] ?? '');
// Skip tickets without a name
if ( ! $name ) {
continue;
}
// Continue for specific types
if ( in_array( $ticket_type, array( 'FREE', 'LOCKED' ) ) ) {
continue;
}
// Get data
$currency_code = 'EUR';
$base_price = (int) ($ticket_group[ 'priceInCents' ] ?? 0);
$online_sales_enabled = (bool) ($ticket_group[ 'onlineSales' ] ?? false);
$door_sales_enabled = (bool) ($ticket_group[ 'doorSales' ] ?? false);
$online_service_fee_fixed = (int) ($ticket_group[ 'onlineServiceFeeFixedInCents' ] ?? 0);
$online_service_fee_variable = (int) ($ticket_group[ 'onlineServiceFeeVariableInCents' ] ?? 0);
$door_service_fee_fixed = (int) ($ticket_group[ 'doorServiceFeeFixedInCents' ] ?? 0);
$is_membership = (string) ($ticket_type === 'MEMBERSHIP');
$online_total_service_fee = $online_service_fee_fixed + $online_service_fee_variable;
$door_total_service_fee = $door_service_fee_fixed;
// Init
$online_total_price = 0;
$door_total_price = 0;
// Calculate online total price
if ( $online_sales_enabled && $base_price > 0 ) {
$online_total_price = $base_price + $online_total_service_fee;
}
// Calculate door total price
if ( $door_sales_enabled && $base_price > 0 ) {
$door_total_price = $base_price + $door_total_service_fee;
}
// Init
$tickets = array();
/*
* Translators:
* %1$s: The base price of a ticket
* %2$s: The service fee of a ticket
*/
$ticket_price_breakdown_string = _x( '%1$s + %2$s service fee', 'Ticket price breakdown: base price + service fee', 'wp-stager-integration' );
if ( $online_sales_enabled ) {
$tickets[] = array(
'title' => esc_html__( 'Online ticket', 'wp-stager-integration' ),
'price' => $online_total_price,
'subtext' => $online_total_service_fee > 0 ? $ticket_price_breakdown_string : '',
'base_price' => $base_price,
'service_fee' => $online_total_service_fee,
'url' => $is_membership ? $event_membership_url : $event_shop_url,
);
}
if ( $door_sales_enabled ) {
$tickets[] = array(
'title' => esc_html_x( 'At the door', 'Displayed on event pages above tickets that are sold at the door (in person), as opposed to online.', 'wp-stager-integration' ),
'price' => $door_total_price,
'subtext' => $door_total_service_fee > 0 ? $ticket_price_breakdown_string : '',
'base_price' => $base_price,
'service_fee' => $door_total_service_fee,
'url' => null,
);
}
// Add processed ticket group
$ticket_groups[] = array(
'title' => $name,
'tickets' => $tickets,
);
}
// Render the component
self::render( 'event-ticket-groups', 'template-parts/event-page', array(
'ticket_groups' => $ticket_groups,
) );
}💡 If you ever get stuck or have a question, please check our FAQs, our Free Integration Service, our paid Full Integration Service, or reach out to us!

Get WP Stager Integration
🎁 Limited offer: Use code WELCOME26 to get your first month for free!

