Skip to content

Core Concepts

Core Concepts

Tickets Please organizes event data using WordPress custom post types that link together through meta fields. Understanding these relationships helps you make sense of the admin interface, build better events, and troubleshoot when something looks off. This page explains each content type, how they connect, and the capacity model that controls ticket availability.

Content Types

Tickets Please creates seven custom post types. Each one represents a distinct piece of your event ecosystem.

Events (tribe_events)

Events are the central content type. Everything else connects back to an event.

An event has a title, content body (built in the block editor), start date, end date, and optional fields like cost summary and featured image. Events link to one venue and one or more organizers through meta fields stored on the event post.

Events appear on the frontend through calendar views (List, Month, Day) and as individual event pages with their own permalink. They support the tec_event_category taxonomy for categorization and standard WordPress tags for flexible labeling.

Venues (tribe_venue)

A venue represents a physical location. It stores a name, street address, city, state, zip code, country, phone number, and website URL. If you have a Google Maps API key configured, the address is automatically geocoded into latitude and longitude coordinates for map display.

Venues are created independently and linked to events through a meta field on the event. One venue can be used by many events. When you update a venue’s address, every event at that venue reflects the change.

Organizers (tribe_organizer)

An organizer is a person or organization that runs events. It stores a name, phone number, website, and email address.

Events can have multiple organizers, stored as a comma-separated list of organizer post IDs in the event’s meta. Organizers are displayed on the frontend event page with their contact information.

Tickets (tec_tc_ticket)

A ticket is a purchasable (or RSVP-able) item linked to a specific event. Each ticket has a name, type (Paid or RSVP), price (for paid tickets), capacity, and optional sale start and end dates.

Tickets are the bridge between events and attendees. When someone buys a ticket or submits an RSVP, the system creates an attendee record linked to both the ticket and its parent event.

Key meta fields on a ticket:

Meta KeyPurpose
_ticket_typepaid or rsvp
_ticket_pricePrice in your configured currency (paid tickets only)
_ticket_event_idThe event this ticket belongs to
_ticket_capacityMaximum number available (-1 for unlimited)

Attendees (tec_tc_attendee)

An attendee represents one person’s registration for one ticket. Attendees are created automatically when a paid order is completed or an RSVP form is submitted. You do not create attendees manually.

Each attendee links to both a ticket and an event, which means you can query attendees from either direction: “who bought tickets for this event?” or “who holds this type of ticket?”

Attendees have a status field that tracks their lifecycle: confirmed, checked-in, cancelled, or refunded. The admin attendee list lets you manage check-ins, export to CSV, and perform bulk status changes.

Key meta fields on an attendee:

Meta KeyPurpose
_attendee_ticket_idThe ticket this attendee registered for
_attendee_event_idThe event this attendee is attending
_attendee_statusCurrent status (confirmed, checked-in, etc.)

Orders (tec_tc_order)

An order groups attendees from a single purchase. If someone buys three tickets at once, one order is created with three linked attendees. For paid tickets, the order also links to a WooCommerce order through the _tec_wc_order_id meta field.

RSVP registrations create a lightweight order as well, grouping any attendees from the same submission.

Event Series (tribe_event_series)

A series represents a recurring event pattern. Instead of manually creating the same event every week, you create a series with a recurrence rule (daily, weekly, monthly, or custom pattern). The series generates individual event occurrences that share the same base content but have their own dates.

Each occurrence in a series is a full event post. You can override the content, venue, or tickets on individual occurrences without affecting the rest of the series.

How Content Types Connect

Here is how the relationships flow:

Event Series
└── Event (one of many occurrences)
├── Venue (one per event)
├── Organizer (one or more per event)
└── Ticket (one or more per event)
└── Attendee (one per registration)
└── Order (groups attendees from one purchase)

All relationships are stored as post meta on the child post type. An event stores its venue ID. A ticket stores its event ID. An attendee stores both its ticket ID and event ID. This means standard WP_Query meta queries or REST API filters work for any relationship.

The Capacity Model

Capacity controls how many tickets can be sold or RSVPs accepted. Tickets Please supports three capacity modes:

Individual Capacity

Each ticket type has its own independent capacity. If you create a “General Admission” ticket with capacity 100 and a “VIP” ticket with capacity 20, you can sell up to 100 general and 20 VIP tickets regardless of each other. Total possible attendees: 120.

This is the default and most common mode. Use it when different ticket types represent genuinely separate allocations (different sections, different experience levels, different time slots).

Shared Capacity (Global Stock)

Multiple ticket types draw from a single shared pool. You set a global capacity on the event (say, 200), and all ticket types subtract from that pool. If 150 general admission tickets sell, only 50 remain for VIP, early bird, or any other ticket type.

Use shared capacity when the venue has a hard limit and you do not care about the mix of ticket types, just the total headcount.

To set up shared capacity, configure the Event Capacity field on the event itself, then set each ticket’s capacity mode to “Shared” in the ticket editor. Individual ticket caps within the shared pool are optional but available — you can say “shared pool of 200, but no more than 30 VIP.”

Unlimited Capacity

Set a ticket’s capacity to -1 and there is no limit on sales or RSVPs. The ticket remains available until you manually close it or its sale end date passes.

Use unlimited capacity for virtual events, waitlists, or situations where you genuinely do not need to cap attendance.

Taxonomies

Tickets Please registers one custom taxonomy:

Event Categories (tec_event_category) — a hierarchical taxonomy (like WordPress categories) for organizing events. You might have “Workshops,” “Concerts,” “Fundraisers,” and subcategories within each. Event categories drive frontend filtering and can be used to style different event types differently.

Events also support standard WordPress Tags (post_tag) for cross-cutting labels that do not fit a strict hierarchy.

REST API

Tickets Please exposes two REST API namespaces:

  • tribe/events/v1 — endpoints for events, venues, organizers, and event categories
  • tribe/tickets/v1 — endpoints for tickets, attendees, and orders

Both namespaces support standard CRUD operations, filtering, pagination, and field selection. Authentication uses WordPress application passwords or cookie-based authentication for logged-in users. Read-only endpoints for published events are public by default.

Common Questions

Can an event have both paid and RSVP tickets? Yes. You can mix paid and RSVP ticket types on the same event. Each ticket type has its own capacity and settings. Visitors choose which ticket type they want on the frontend.

What is the difference between event capacity and ticket capacity? Event capacity is the shared pool used in shared capacity mode. Ticket capacity is per-ticket-type. In individual capacity mode, there is no event-level capacity — each ticket manages its own limit.

Can I move a ticket from one event to another? Yes. Edit the ticket and change the linked event in the Linked Event dropdown. Existing attendees remain linked to the ticket and will reflect the new event.

How are organizer IDs stored on events? As a comma-separated string in the event’s post meta. An event with two organizers stores something like "42,87". Tickets Please handles the parsing — you do not need to manage the format yourself in normal usage.

Can I query attendees with WP_Query? Yes. Attendees are standard posts of type tec_tc_attendee. You can use meta_query to filter by event ID, ticket ID, or status. The REST API is often easier for this, but direct queries work.

What happens if I delete a ticket that has attendees? The attendee records remain in the database with their original ticket ID reference. They are still visible in the attendee admin list, but the ticket link shows as “(deleted).” Existing orders and WooCommerce records are not affected.

Next Steps