Install
Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/mt-support/tec-labs-wpai-add-on/releases/download/1.2.1/tec-labs-wpai-add-on-1.2.1.zipWP All Import Add-On for The Events Calendar
This extension is needed to successfully migrate The Events Calendar and/or Event Tickets data from one WordPress site to another. It is the glue between The Events Calendar/Event Tickets and WP All Import Pro (premium).
⚠️ Note: the extension is primarily intended to help migrate data from The Events Calendar to another The Events Calendar 6.0+ using the new data storage system (after data migration). Importing from other sources may be possible with additional setup and tweaks, please note however, that is beyond the official scope of this extension and support.
1. Compatibility
Currently, this add-on supports the following calendar and ticket data to be migrated:
- Venues
- Organizers
- Single events, including all-day and multi-day events
- Recurring Events (from version 1.2.0)
- Event Series (from version 1.2.0)
- RSVPs and Attendees
- Tickets Commerce Tickets, Orders, and Attendees
The add-on currently DOES NOT support the following data types:
- Event Tickets Plus/WooCommerce tickets, orders, and attendees
Adding support for these is on our roadmap.
2. Requirements
- The Events Calendar – for event-related data
- Events Calendar Pro 7.6.1 or later – for recurring events and event series
- Event Tickets – for ticket and attendee-related data
- WP All Export (free works, Pro is recommended) on the source site where you are migrating events from.
- WP All Import Pro (premium) on the destination site to which you are migrating events.
- WP All Import Add-On (this extension) on the destination site to which you are migrating events.
3. Preamble
The migration process is fairly simple: the data needs to be exported from one site and imported into the other site. This has to be done for every post type you would like to migrate separately. It is as easy as it sounds. Still, there are a few details to pay attention to to make sure the migration is successful.
It is recommended that you clean up event data on the source site, so that you only migrate data that is needed to avoid bloating your database.
Consider cleaning up event data on the destination site as well to start with a clean slate. Without that, you might get unexpected results, including some data getting deleted.
It is always a good idea to create a database backup of the destination site before starting the migration. To prevent any surprises, it is even better to test the migration on a staging site first, which should be an exact copy of the live destination site. The Events Calendar is not responsible for any data loss.
3.1. "Lock" the site
When you start exporting the data from the source site, make sure that you "lock" the data so that there are no more changes when you are midway through the export. Otherwise, the data can be corrupted after migration.
3.2. The order of importing data
The different post types of The Events Calendar and Event Tickets plugins are linked together in a certain way. This is why it's really important that the different post types are imported in a specific order. Otherwise, they cannot be re-linked during the import, and the migration will not be successful.
Here is the order in which the post types have to be imported. If you are not migrating a certain post type, you can skip that.
| Data Type | Post Type |
|---|---|
| Venues | tribe_venue |
| Organizers | tribe_organizer |
| Events | tribe_events |
| Series | tribe_event_series |
| RSVP "Tickets" | tribe_rsvp_tickets |
| RSVP Attendees | tribe_rsvp_attendees |
| Tickets Commerce Tickets | tec_tc_ticket |
| Tickets Commerce Orders | tec_tc_order |
| Tickets Commerce Attendees | tec_tc_attendee |
4. The Migration Process
4.1. Exporting the data
We are going to assume that The Events Calendar and WP All Export (free or Pro) are installed and activated on the source site. For exporting Series, Events Calendar Pro is needed as well.
-
On the WordPress dashboard, head over to WP Export > New Export.
-
Choose "Specific Post Type" and, from the dropdown, select the post type you want to export.
Screenshot: Steps 1 and 2 of the export process. Go to WP Export > New Export and select the post type
-
After choosing the post type, you will see a notification showing how many will be exported.
If you have WP All Export Pro, then continue with the Pro steps below (section 4.1.1). If you only have the free version, skip to 4.1.2 Exporting with WP All Export Free.
Important! Migrating the Series post type requires some manual steps, so you need to follow the steps of the free version even if you have Pro.
4.1.1. Exporting with WP All Export Pro
WP All Export Pro does most of the heavy lifting for you, automatically adding all necessary data to the export file.
-
With WP All Export Pro installed, you can add further filtering options to export only posts with specific properties.
-
Click on the blue Migrate button to proceed to the last step before the export.
Screenshot: Steps 3 to 5 of the export process with WP All Export Pro. Choose the post type, fine-tune the selection, and click Migrate
-
Skip ahead to 4.1.3. Final Export Steps.
4.1.2. Exporting with WP All Export Free
With the free version of WP All Export, you need to manually select all the data you want included in the export.
-
Click on the Customize Export File button to advance to the next step.
Screenshot: When using the free version of WP All Export you have to customize the export file
-
In the Drag & Drop step, select the data you want exported. On the right side of the screen, there is a column called "Available Data", divided into different sections. Open each section and drag the items into the frame on the left. The following must be included for a successful migration:
- Standard – All
- Media
- Images: Image URL, Image Title, Image Caption, Image Description, Image Alt Text, Image Featured
- Attachments: Attachment URL
- Taxonomies – All
- Custom Fields – All (without this, events will be missing crucial data like start and end date)
- Other – All
-
When exporting Series, you must also add one more field containing the events linked to the Series:
- Click on the Add Field button.
- Add
posts_in_seriesas the Column name. - Leave the other fields unchanged and click Save.
Screenshot: Adding a custom field for "posts_in_series"
After saving, clicking Preview should show a column named
posts_in_seriespopulated with post IDs.Screenshot: The export preview highlighting the manually added column
-
At the bottom of this screen, you can save the setup as a template, or load an existing one.
Screenshot: Drag & Drop the fields you want to export and save or load a template
When done, click Continue.
4.1.3. Final Export Steps
This is where the Free and Pro paths merge...
-
On the Export Settings page, you can configure advanced settings to customize your export further. These are mostly useful for repeated or scheduled exports. For a one-time migration, no changes are needed here.
-
Click the green Confirm & Run Export button (top right) or the blue Save & Run Export button (bottom of screen) to start the export.
Screenshot: Steps 6 and 7 of the export process. You can optionally set up scheduling and then click on "Run Export"
-
When the export reaches 100%, download the data by clicking the blue Bundle button to save a
.zipfile to your PC.Screenshot: Step 8 of the export process. When the export is done, click on "Bundle" to download the data to your PC
The export for this post type is done. Repeat the above steps for all post types you would like to migrate.
4.2. Importing the data
We will assume that The Events Calendar, WP All Import Pro, and this extension are installed and activated on the destination site. For importing Series, Events Calendar Pro is needed as well.
When importing, pay close attention to the order of import described in 3.2. The order of importing data above.
-
On the WordPress dashboard, head over to All Import > New Import.
-
Choose Upload a file and select the bundle
.zipfile you downloaded. If the file has been uploaded before and you are re-running the import, you can select "Use existing file" instead. -
WP All Import will upload the file and try to select the right post type automatically. If the relevant plugin is not activated, WP All Import will not recognize the post type and the import will not work as expected.
Screenshot: Steps 1 to 4 of the import process. Go to All Import > New import and upload the bundle file. Click on "Skip to step 4"
If you are importing a Series, jump to 4.3 Importing a Series section below.
-
Click the grey Skip to step 4 button to go to the import settings page.
- Alternatively, click Continue to Step 2 to review your import file and optionally filter which posts to import.
- In Step 3, you can map the incoming data elements to the correct post fields.
-
On the Import Settings page, verify the Unique Identifier field is set to
{id[1]}. There are other settings available to fine-tune the import, but for a full migration nothing more is needed. Click Continue.Screenshot: Step 5 of the import process. Verify the unique identifier, then click on “Continue”
-
On the confirmation page, double-check the import summary, then click the green Confirm & Run Import button.
Screenshot: Step 6 of the import process. Double-check, then confirm and run
-
On the next screen, follow the progress of the import. The import finishes successfully when you see "Import Complete!"
Screenshot: Step 7 of the import process. Sit back, relax, and wait for the import to finish.
_
Screenshot: Import Complete!
-
To verify that your import succeeded, review the new events under Events > All Events.
The import for this post type is done. Repeat the above steps for all post types you would like to import, following the correct order.
For more detailed information about how the export and import works with WP All Export/Import, visit their documentation.
4.3. Importing a Series
Follow steps 1–3 of the 4.2. Importing the data section above, then continue here.
-
After uploading the file, click Continue to Step 2.
-
If you want to import all the data, click Continue to Step 3.
-
In Step 3, map the post IDs connected to the Series:
- Open the Custom Fields section and click Add Custom Field at the bottom.
- In the right column, find
posts_in_seriesand drag it into the value field. It should populate the value{posts_in_series[1]}. - In the Name field enter
posts_in_series. - Click Continue to Step 4.
Screenshot: Adding the custom field to import Series data
-
In Step 4, verify the Unique Identifier field:
- Clear the field.
- Drag and drop
idfrom the right column into the field. It should add the value{id[1]}. - Click Continue.
Screenshot: Making sure the Unique Identifier is the correct one
-
On the confirmation page, double-check the import summary, then click the green Confirm & Run Import button.
-
Follow the progress of the import. The import finishes successfully when you see "Import Complete!"
-
If all went well, all Series should be imported with all recurring events assigned to them, as they were on the source site.
5. Logging
WP All Export/Import keeps a detailed log of its actions. The logs can be downloaded and reviewed after an import/export is done.
The Events Calendar also adds its own entries to the logs, which can provide information in case something doesn't work out. These log entries are colored blue to make them stand out.
6. Advanced Topics, Hooks
6.1. Forcing the import when related post type is missing
There are post types that are linked to a different post type and would not work without them. For example, an RSVP attendee depends on the RSVP ticket and the Event the RSVP ticket is linked to. If any of those are missing, the RSVP attendee will not be imported.
It is possible to override this behavior with a filter and force the import even if the related post type doesn't exist:
apply_filters( 'tec_labs_wpai_force_import_' . $data['posttype'], false, $data, $import_id )
Where $data['posttype'] is the post type you want to force-import.
For example, to force-import RSVP attendees even when the related ticket or event is missing:
add_filter( 'tec_labs_wpai_force_import_tribe_rsvp_attendees', function() { return true; } );
6.2. Keeping empty metadata
Post types can accumulate a lot of metadata, and some of those might have empty values. During import, empty metadata will be skipped to minimize unnecessary data. There are two ways to override this.
6.2.1. Force all
Force all empty metadata to be imported:
add_filter( 'tec_labs_wpai_keep_empty_meta', function() { return true; } );
6.2.2. Force selected
Define specific meta keys to keep even when they have an empty value:
add_filter( 'tec_labs_wpai_keep_post_meta_meta_keys', 'tec_wpai_keep_empty_meta_keys' );
function tec_wpai_keep_empty_meta_keys( $keep_post_meta_meta_keys ) {
$keep_post_meta_meta_keys = [
'my_custom_meta_key_1',
'my_custom_meta_key_2',
];
return $keep_post_meta_meta_keys;
}
6.3. Mismatching post type
By default, importing Events Calendar or Event Tickets post types as a different post type is not allowed. To override this, add the following to your functions.php:
add_filter( 'tec_labs_wpai_delete_mismatching_post_type', function() { return false; } );
Note: this only affects post types belonging to The Events Calendar and Event Tickets. It has no effect on other post types.
6.4. Setting a default post type
Since version 1.1.0
You can change the default post type with the following snippet:
add_filter( 'tec_labs_wpai_default_post_type', static function() { return 'my_custom_post_type'; } );
Keep in mind, the post type has an effect on the tec_labs_wpai_force_import_' . $data['posttype'] filter.
7. Changelog
1.2.0
- July 3, 2025
- Version – Events Calendar Pro 7.6.1 or higher is required for the migration of Series.
- Feature – Add support for Event Series and Recurring Events.
- Fix – Ensure other non-TEC post types can be imported when the extension is active.
- Deprecated – Deprecated the
tec_labs_wpai_is_post_type_setfilter without replacement.
1.1.0
- September 12, 2024
- Feature – Add the
tec_labs_wpai_is_post_type_setfilter to allow force importing when the post type is not defined in the source. - Feature – Add the
tec_labs_wpai_default_post_typefilter to allow changing the default post type used, in case it is missing from the source. - Tweak – Add more details to some log messages.
- Tweak – Adjust error logging to better handle special characters in log messages. (Props to Rob Gabaree.)
1.0.0
- October 17, 2023
- Initial release
Releases
4 releases. Each count is every asset in that release; expand a row for the breakdown.
Active-site estimate ≈550 comes from the median of recent superseded releases. Method.