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
- Part 1: Planning and data preparations
- Part 2: Users import
- Part 3: Progress import
- Part 4: Reviews import
- Part 5: Other adaptations and conclusions
Introduction
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 WordPress
.
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.
And 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.
I chose 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 PHP
configurations.
I run the migration locally and only then move the site to the production instance.
Migration planning
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 LMS
that I can use to bypass potential checks. - Examined the relationships between entities in the database.
- Determined the necessary information to be filled in the
WordPress
instance for a user to access their courses. - Identified the fields to which other data in
Thinkific
must be matched. - Established the optimal method for migration (I've already decided:
WP-CLI
rocks!)
Furthermore, I outlined the list of actions that I need to complete:
- Prepared data exported from
Thinkific
by normalizing it and removing irrelevant information. - Ensured that no email notifications are enabled (e.g., for
WordPress
account creation or other emails related toWooCommerce
orders). - ❗️ Based on my research on the functionality of the
Tutor LMS
plugin, there is a need for aPHP
check 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 Thinkific
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.
Users
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 CSV
format.
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).
Courses
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 WooCommerce
.
The process was quite fast; the main time consumption was in visually arranging and styling them with Elementor
.
The way 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.
Progress
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 Thinkific
dashboard.
📛 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 100
.
For the remaining values other than 100, being fewer in number, I took the responsibility to update them manually directly in the database.
Reviews
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:
Closing thoughts
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 meShare on: