DEV Community

Cover image for Migrate from Thinkific to WordPress. #1 Planning and data preparation
Vlad Ilie
Vlad Ilie

Posted on

Migrate from Thinkific to WordPress. #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:

  1. Part 1: Planning and data preparation
  2. Part 2: Users import
  3. Part 3: Progress import
  4. Part 4: Reviews import
  5. Part 5: Other adaptations and conclusions

Introduction

2023 ended with a small WordPress challenge for me, to which I happily answered with "Yes!". It involved the content migration on WordPress of the masterclassonline.ro site belonging to the Cultural Association Cărțile pe față.

The e-learning site has been hosted so far on the Thinkific platform, which is 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 on 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 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 were enabled (e.g., for WordPress account creation or other emails related to WooCommerce orders).
  • ❗️ Based on my research on the functionality of the Tutor LMS plugin, there is a need for a PHP 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

I had some challenges with data, but 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.

Export users from Thinkific Dashboard

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:

First Name,Last Name,Amount spent,Date created,Email,Enrollments,Enrollments - list,External source,Last sign in,Referred by,Roles,Sign in count
Enter fullscreen mode Exit fullscreen mode

Of all the data, I only need the following:

  • First Name
  • Last Name
  • Date created
  • Email
  • Enrollments - list

So, I can either normalize the file and remove everything I don't need, or go through it 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.

Export progress from 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:

Email,Completed At,% Completed,<Chapter-1>,<Chapter-2>,...,<Chapter-n>
Enter fullscreen mode Exit fullscreen mode

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 were 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:

// reviews-course-1.json

{
  "@context": "http://schema.org",
  "@type": "Product",
  "name": "<course-name>",
  "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.6", "reviewCount": 5 },
  "review": [
    {
      "@type": "Review",
      "author": { "@type": "Person", "name": "<reviewer-name>" },
      "description": "<review-description>",
      "name": "<review-title>",
      "date": "November 26, 2021",
      "reviewRating": { "@type": "Rating", "bestRating": 5, "ratingValue": 5, "worstRating": 0 }
    },
    // ...
  ],
    "image": "<course-image-url>"
}
Enter fullscreen mode Exit fullscreen mode

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. ✌️

This article was first published on my blog.

Top comments (0)