The Events Calendar Pro now starts at $259 a year after the Liquid Web consolidation, and plenty of sites that only use it for a calendar with a few recurring events are looking at the renewal and wondering if it's worth it. I spent this week writing an importer for TEC data, so here's what that data looks like and where a migration goes wrong, whichever plugin you end up on.
Disclosure: the importer is part of Beacon Events, a free calendar plugin I built. Everything below applies no matter what you switch to.
What's in your database
Events are regular posts (tribe_events) with the dates in post meta: _EventStartDate, _EventEndDate, _EventTimezone, _EventAllDay. Venues and organizers are their own post types (tribe_venue, tribe_organizer), linked from the event through _EventVenueID and _EventOrganizerID. Categories are the tribe_events_cat taxonomy.
Recurring events are the part that bites. On TEC 6 with Pro, the rule is stored in TEC's custom wp_tec_events table as an iCalendar rule set, not in post meta. Older TEC 5 sites kept a serialized _EventRecurrence array, and some still have one generated child post per occurrence sitting next to the parent event.
If you sell tickets with Event Tickets, those are post types too: tribe_rsvp_tickets and tec_tc_ticket, with attendees in tribe_rsvp_attendees and tec_tc_attendee. A paid attendee points to its order through post_parent, and the order's status is the order post's status (tec-tc-completed, tec-tc-pending and so on).
Where migrations go wrong
- A recurring series becomes hundreds of events. If you move data through a generic export, check whether a weekly class arrives as one rule or as 52 separate posts. The second one is miserable to edit later.
-
Time zones stored as offsets. If the site time zone was ever set to something like
UTC+2instead of a city, event times can end up stored that way. An offset knows nothing about daylight saving, so a 6pm class drifts to 7pm for half the year. Map offsets to a named zone. -
Leftover shortcodes and blocks. Event content often contains
[tribe_events]shortcodes andtribe/*blocks. Once TEC is deactivated, the shortcodes print as raw text and the blocks render nothing. Strip them. -
Old URLs. Single events usually keep
/event/slug/, but category pages and calendar views live under/events/category/...and/events/month/. Those 404 after the switch unless something redirects them, and that's search traffic you worked for. - Unpaid orders counted as seats. If you bring attendees along, leave out pending and failed orders. Those people never paid.
A checklist that holds up
- Back up the database. Actually do it.
- Install the new plugin with TEC still active and run the import. Nothing in TEC should be deleted while you check.
- Spot-check one recurring series, one event in a different time zone, and one event with tickets.
- Deactivate TEC and click through a few old URLs, including a category page.
- Only then cancel the renewal.
If you want to try Beacon Events
It's free on wordpress.org. Recurring events are free, including cancelling or moving a single date of a series. Events → Import / Export reads the TEC data described above in one click (events, venues, organizers, categories, images, recurring rules), strips the TEC shortcodes and blocks, and redirects the old category and view URLs. It also imports from Events Manager and CSV. The paid add-on ($49 a year, with a 14-day free trial that needs no card) does RSVP and tickets and brings Event Tickets attendees across: RSVP, Tickets Commerce, and Event Tickets Plus orders paid through WooCommerce.
Short video tour (1:39):
Live demo on a stock Twenty Twenty-Five site: https://store-safety.duckdns.org/demo/
https://wordpress.org/plugins/beacon-events/
If your TEC data has something this doesn't cover, tell me in the comments.
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.