/** * Determines if the event has sold out of tickets. * * Note that this will also return true if the event has no tickets * whatsoever, and so it may be best to test with tribe_events_has_tickets() * before using this to avoid ambiguity. * * @param null $event * * @return bool */ function tribe_events_has_soldout($event = null) { $has_tickets = tribe_events_has_tickets($event); $no_stock = tribe_events_count_available_tickets($event) < 1; $unlimited_inventory_items = tribe_events_has_unlimited_stock_tickets($event); return $has_tickets && $no_stock && !$unlimited_inventory_items; }
/** * Accepts an array of objects used to generate Google Event Data and adds * "offers" data representing tickets where appropriate. * * @param array $events_data * * @return array */ public function add_ticket_data(array $events_data) { foreach ($events_data as $this->event_id => &$this->event) { if (!tribe_events_has_tickets($this->event_id)) { continue; } $this->add_ticket_offers(); } return $events_data; }
/** * Adds the tickets data to the event Object * * @param array $data * @param array $args * @param WP_Post $post * * @return array */ public function add_ticket_data($data, $args, $post) { if (!tribe_events_has_tickets($post->ID)) { return $data; } $tickets = Tribe__Tickets__Tickets::get_all_event_tickets($post->ID); // Reset it $data->offers = array(); foreach ($tickets as $ticket) { $data->offers[] = $this->get_offer($ticket, $post); } return $data; }
/** * Injects a buy/RSVP button into oembeds for events when necessary */ public function inject_buy_button_into_oembed() { $event_id = get_the_ID(); if (!tribe_events_has_tickets($event_id)) { return; } $tickets = Tribe__Tickets__Tickets::get_all_event_tickets($event_id); $has_non_rsvp = false; $available = false; $now = current_time('timestamp'); foreach ($tickets as $ticket) { if ('Tribe__Tickets__RSVP' !== $ticket->provider_class) { $has_non_rsvp = true; } if ($ticket->date_in_range($now) && $ticket->is_in_stock()) { $available = true; } } // if there aren't any tickets available, bail if (!$available) { return; } $button_text = $has_non_rsvp ? __('Buy', 'event-tickets') : __('RSVP', 'event-tickets'); /** * Filters the text that appears in the buy/rsvp button on event oembeds * * @var string The button text * @var int Event ID */ $button_text = apply_filters('event_tickets_embed_buy_button_text', $button_text, $event_id); ob_start(); ?> <a class="tribe-event-buy" href="<?php echo esc_url(tribe_get_event_link()); ?> " title="<?php the_title_attribute(); ?> " rel="bookmark"><?php echo esc_html($button_text); ?> </a> <?php $buy_button = ob_get_clean(); /** * Filters the buy button that appears on event oembeds * * @var string The button markup * @var int Event ID */ echo apply_filters('event_tickets_embed_buy_button', $buy_button, $event_id); }