Skip to main content
Documentation/Integrations/The Events Calendar
Integrations

The Events Calendar

The Events Calendar stores events as an ordinary WordPress
custom post type, which means most of what you'd want to do with events in Oxygen is ordinary
Oxygen work: loop over them, build a template for a single event, bind their fields to
elements.

Oxygen's integration covers the part that isn't ordinary — making sure The Events Calendar's
own calendar views bring their stylesheets and scripts with them on pages that Oxygen renders,
including the Pro and Virtual Events assets when those add-ons are active.

Build event listings yourself

Events behave like any other post type in a loop:

  1. Add a Post Loop Builder and set its query's post type to Events.
  2. Bind the usual things — title, permalink, featured image — the way you would for posts.
  3. Bind event-specific values with the Post → Custom Field dynamic field, using The Events
    Calendar's meta keys:
A Post Loop Builder with its query set to the Events post type, real events rendering on the canvas
What you want Meta key
Start date and time _EventStartDate
End date and time _EventEndDate
Cost _EventCost
All-day flag _EventAllDay
Venue post ID _EventVenueID
Organizer post ID _EventOrganizerID

Custom Field returns the stored value as a string, unchanged. Dates come out in MySQL form —
2026-09-10 10:00:00 — and the field has no date formatter, only the usual Prepend, Append,
Limit Characters and Fallback options. If you need "10 September, 10am" you'll have to format
it yourself in a PHP Code element or a snippet.

Note: _EventAllDay holds the string yes or no — not a boolean. A condition that
tests whether it's set or truthy is true for both values. Compare it to yes explicitly.

Note: _EventVenueID and _EventOrganizerID don't exist on an event until a venue or
organizer is actually linked to it. Give those bindings a fallback.

Ordering by start date

Oxygen's visual query builder can order by date, modified date, title, comment count, menu
order and random — plus ACF and Meta Box fields when those plugins are active. It has no
option for ordering on an arbitrary meta key, so sorting events by when they start needs the
loop's custom query instead:

post_type=tribe_events&meta_key=_EventStartDate&orderby=meta_value&order=ASC

Switch the loop's query to the text (or PHP) query type and use that.

Single event templates

Events can have an Oxygen template like any other post type. Check Events is enabled under
Oxygen → Settings → Post Types, then create a Single template and set its location to
Events.

Oxygen → Settings → Post Types with Events enabled

Note: Venues and Organizers can't. The Events Calendar registers those two post types as
non-public, so they don't appear in Oxygen's post type list and can't be given a template.
Build venue and organizer content into your event template instead, from _EventVenueID /
_EventOrganizerID.

Using The Events Calendar's own views

The calendar at /events/ and the plugin's own single event pages keep working as they always
did — they're rendered by The Events Calendar, not by Oxygen.

To place one of the plugin's views inside an Oxygen layout, put its shortcode in a
Shortcode element. Oxygen runs the shortcode normally, and the integration makes sure the
view's assets are loaded so it comes out styled and interactive.

A Shortcode element rendering one of The Events Calendar's own calendar views inside an Oxygen layout on the front end

Note: the calendar view shortcode [tec_events] is part of Events Calendar Pro. The
free plugin registers only [tribe:event-details], so [tec_events] on a free install
prints as literal text rather than a calendar.

Troubleshooting

The shortcode prints as text on the page

That shortcode isn't registered on your install. The most common case is [tec_events]
without Events Calendar Pro — see the note above. Anything not registered comes out as the
literal string you typed, which is WordPress behaviour, not an Oxygen one.

The calendar view appears but looks unstyled

Check that The Events Calendar is active and up to date. Oxygen enqueues the plugin's Views v2
assets on the pages it renders; if the plugin's own views are switched off, those assets don't
exist to enqueue.

My event loop shows every event in a random order

Set the query's ordering. The visual query builder can't order on _EventStartDate — use the
text query shown above.

An event's venue name is blank

The event has no venue linked, so _EventVenueID isn't set on it at all. Link a venue in The
Events Calendar, or give the binding a fallback.