How to migrate from Thinkific to WordPress. Part 1: Planning and data preparation
In this series of 5 articles, I propose to write about how I migrated from the e-learning platform Thinkific to
WordPress, how I exported the data from
Thinkific, what technologies I used, how WordPress Command Line Interface (
WP-CLI) helped me, and how I made other minor changes to templates or using
WordPress API hooks.
Below, I leave you the list of articles in the series:
Table of contents
2023 ended with a small
WordPress challenge for me, to which I happily answered with "Yes!".
It involves the migration of the content of the site masterclassonline.ro, a site belonging to the Cultural Association Cărțile pe față, on
The e-learning site was hosted so far on the
Thinkific platform, a platform dedicated to online courses.
The main reason for this migration was price.
And for a few courses, such a platform is too much.
WordPress fits here like a glove.
It's flexible, there are some good e-learning plugins on the market, there's even more flexibility in developing new functionality, and the experience I have is even more enjoyable.
It can also bring some performance improvements.
Migrating data from one side to another is just a matter of time.
WP-CLI, the command line interface for
WordPress because the process is singular.
I need real-time monitoring during the migration, I have full control over the data, and the limitations are only those I impose in the local
I run the migration locally and only then move the site to the production instance.
Assessment of requirements and resources
In my case, the data I need from
Thinkific is as follows:
- the courses
- users and their enrollment in courses
- user progress for the courses they follow
- course reviews received from students
The conditions for enrolling users in
WordPress courses that, for example, require the creation of
WooCommerce orders must also met.
In addition to these, on the future platform, I need the following functionalities:
- user registration and authentication
- purchasing courses
- card payment
- possibility of invoicing per legal entity
- users can track the progress of purchased courses
Create a detailed plan for the migration
For the new home of the Masterclass Online site, I chose the Tutor LMS plugin configured with WooCommerce for order processing, including payment, invoicing, and other integrations. However, I won't go into the details here.
Next, I studied the e-learning plugin to determine the technical requirements needed for migrating the data:
- Identified filters and actions in
Tutor LMSthat I can use to bypass potential checks.
- Examined the relationships between entities in the database.
- Determined the necessary information to be filled in the
WordPressinstance for a user to access their courses.
- Identified the fields to which other data in
Thinkificmust be matched.
- Established the optimal method for migration (I've already decided:
Furthermore, I outlined the list of actions that I need to complete:
- Prepared data exported from
Thinkificby normalizing it and removing irrelevant information.
- Ensured that no email notifications are enabled (e.g., for
WordPressaccount creation or other emails related to
- ❗️ Based on my research on the functionality of the
Tutor LMSplugin, there is a need for a
PHPcheck to be denied. I delved (probably not enough) into the plugin, and from all the tests I conducted, without this disclaimer, the user wouldn't see their courses in the dashboard. Unfortunately, a filter for making this process easier does not exist in the plugin.
- Executed the import for users, progress, and reviews.
- Reactivated email notifications if they were disabled previously."
Exporting and preparing data from
In terms of data, I had a bit of a challenge, but in the end, it turned out to be relatively easy to export them.
Fortunately, there is a handy method to export the list of users: Thinkific Dashboard > Student Support > Users > Click on the "Export" button.
Once the processing is complete, an email notification will be sent with a link to download the file in
The header of the exported
CSV file looks like this:
Of all the data, I only need the following:
- First Name
- Last Name
- Date created
- Enrollments - list
So, I can either normalize the file and remove everything I don't need, or I can go through the file and select only the necessary data (initially, I opted for the second option).
Since there are only 4 courses, I didn't find it necessary to export them.
There doesn't seem to be an option for this in the
Thinkific dashboard (or I couldn't locate it).
I manually created the courses in the e-learning plugin and as products in
The process was quite fast; the main time consumption was in visually arranging and styling them with
Thinkific exports the user list is a bit peculiar because, in the
Enrollments - list field of the
CSV file, each user has a separate comma-separated list of course titles they are enrolled in.
As a result, I had to go through each user's list during the import process and manually match them to set up the user-course relationships.
📛 The only drawback in this regard is that the developed plugin is not entirely "plug-and-play"; it will require adaptation for that manual matching if run on a different dataset.
This concerns the progress of each user in each course they are taking.
Once again, the list of each user's progress can be easily exported from the
📛 Another drawback of the
Thinkific platform is that progress can only be exported individually, per course, and not in bulk.
So, if you have many courses on the platform and want such a migration, you might have a more serious task on your hands.
The header of the exported progress
CSV file looks like this:
The values for the columns with
<Chapter-names> range from 0 to 100.
You will see further in part three of the article series that I made a compromise and only treated progress with the value of
For the remaining values other than 100, being fewer in number, I took the responsibility to update them manually directly in the database.
Thinkific doesn't have a user-friendly method to export course reviews.
Through a quick Google search, I came across this article that guided me on how to obtain reviews for each course.
Again, if you have many courses on the platform and want to migrate them to
WordPress, it will require more manual work.
Returning to the point, course reviews are available in the page source of each course.
So, I fetched them from there (after ensuring they are all validated from the
Thinkific dashboard!) in
JSON format this time and worked with them from there (for the sake of dynamics 😁 - kidding, it seemed easier for me to process them this way).
The structure of each
JSON object for reviews looks like this:
Thank you for your patience so far. 🍻
By now, I have the migration plan and all the necessary data from
Thinkific in their respective files.
In the next article, I will tackle the part I enjoy the most, implementing one of the
WP-CLI commands. ✌️
If you need such a migration, click below, and let's discuss.Contact me