Migrate LearnDash to Tutor LMS: Complete tutor_enrolled Migration Guide (2026)
Step-by-step guide to migrate LearnDash to Tutor LMS without losing courses, quizzes, or enrollments. Covers the tutor_enrolled post type, post_parent mapping, database tables, and safe rollback plans.

Need to migrate LearnDash to Tutor LMS without breaking courses or losing enrollments? This guide gives you a step‑by‑step checklist — including how the tutor_enrolled post type works, how post_parent maps enrollments to courses, and how to query the tutor_enrolled custom post type safely during migration.
Looking for a full side-by-side breakdown? Read the detailed comparison here: LearnDash vs Tutor LMS (2026).
Need to understand the tutor_enrolled database table structure? See our deep-dive: Tutor LMS tutor_enrolled Post Type Explained.
Quick tip: migrate one low-stakes course first. It reveals the hidden gotchas before you move everything.
Why Migrate from LearnDash to Tutor LMS?
Common reasons:
- Cost: LearnDash requires an annual license ($199+), Tutor LMS has a robust free version
- Modern Interface: Tutor LMS offers a more intuitive, Gutenberg-friendly course builder
- Active Development: Tutor LMS receives frequent updates and new features
- Better Free Features: Core features like certificates and email notifications are free in Tutor LMS
LearnDash vs Tutor LMS: Quick Decision (2026)
If you want the short answer:
- Choose LearnDash if you need advanced enterprise features, deep third‑party integrations, or you already built a large LearnDash ecosystem.
- Choose Tutor LMS if you want a modern builder, a strong free version, and lower ongoing costs with a simpler setup.
Which one should you choose?
- Choose LearnDash if your business depends on complex reporting, enterprise integrations, or heavy customization.
- Choose Tutor LMS if you want a simpler UI, faster setup, and lower ongoing costs.
Pre-Migration Requirements
Quick Migration Checklist (TL;DR)
- Back up the database + uploads.
- Install Tutor LMS and run the setup wizard.
- Recreate course structure (Lessons/Topics are reversed).
- Migrate quizzes and settings.
- Re-enroll students (manual or scripted bulk).
- Rebuild certificates and email notifications.
- Set 301 redirects for course URLs.
- Test everything on staging before going live.
What Migrates Easily
✅ Course structure (courses, lessons, topics)
✅ Quiz questions and settings
✅ Student enrollments
✅ Course categories and tags
What Requires Manual Work
⚠️ Student progress and quiz scores (no direct migration path)
⚠️ Custom certificates (need to be recreated)
⚠️ Advanced quiz types (matching, essay questions may need adjustment)
⚠️ LearnDash-specific integrations (payment gateways, membership plugins)
Backup Everything First
Before starting, create a complete backup:
- Full WordPress database backup
- Complete file backup (especially
/wp-content/uploads/) - Export all LearnDash data via LearnDash → Tools → Export
Step 1: Install Tutor LMS
- Go to Plugins → Add New
- Search for "Tutor LMS"
- Install and activate Tutor LMS (free version)
- Run through the setup wizard
- Configure basic settings (Tutor LMS → Settings)
Optional but Recommended:
- Install Tutor LMS Pro if you need advanced features (certificates, email notifications, etc.)
Step 2: Understand the Structure Differences
LearnDash Structure
Course
└── Lessons
└── Topics
└── Quizzes
Tutor LMS Structure
Course
└── Topics (equivalent to LearnDash Lessons)
└── Lessons (equivalent to LearnDash Topics)
└── Quizzes
Key Difference: The terminology is reversed. LearnDash "Lessons" = Tutor LMS "Topics", and LearnDash "Topics" = Tutor LMS "Lessons".
Step 3: Manual Course Migration (Recommended Method)
Unfortunately, there's no official automated migration tool. Here's the most efficient manual process:
For Each Course:
A. Create the Course Shell
- Go to Tutor LMS → Courses → Add New
- Enter the course title and description
- Set the course thumbnail (same as LearnDash featured image)
- Configure course settings:
- Price (if paid)
- Duration
- Maximum students
- Difficulty level
B. Migrate Course Content
-
Open your LearnDash course in one browser tab
-
Open the new Tutor LMS course in another tab
-
For each LearnDash Lesson:
- Create a new Topic in Tutor LMS
- Copy the lesson content
- Add any embedded videos or attachments
-
For each LearnDash Topic:
- Create a new Lesson under the appropriate Tutor Topic
- Copy the content
C. Migrate Quizzes
-
In Tutor LMS, create a new quiz under the appropriate lesson
-
Configure quiz settings:
- Time limit
- Passing grade
- Attempts allowed
- Question randomization
-
Add questions:
- True/False → Direct equivalent
- Multiple Choice → Direct equivalent
- Fill in the Blank → Use "Fill in the Blanks" or "Short Answer"
- Essay → Use "Open Ended/Essay"
- Matching → May need to recreate as multiple choice
Pro Tip: Export LearnDash quiz questions to a spreadsheet first, then import them systematically into Tutor LMS.
Step 4: Migrate Student Enrollments
This is the trickiest part since there's no direct migration path.
Method 1: Manual Re-enrollment (Small Sites)
If you have fewer than 50 students:
-
Export student enrollment data from LearnDash:
- Go to LearnDash → Reports
- Export user course data to CSV
-
Manually enroll students in Tutor LMS:
- Go to Tutor LMS → Students
- Use the "Enroll Student" option for each course
Method 2: Bulk enrollment (Large Sites)
If you have many students, use a developer or a custom script to create enrollments in Tutor LMS. Always test on staging and keep a backup before running any bulk action.
Understanding the tutor_enrolled Post Type During Migration
When Tutor LMS creates an enrollment, it inserts a record into wp_posts with post_type = 'tutor_enrolled'. The post_parent field stores the course ID, and post_author stores the student user ID.
During migration, make sure you are creating proper tutor_enrolled records — not just copying LearnDash enrollment entries. A common mistake is importing old sfwd-transactions or sfwd-courses records and expecting Tutor LMS to recognize them.
To verify enrollments migrated correctly, run this query:
SELECT p.ID, p.post_author AS student_id, p.post_parent AS course_id, p.post_status
FROM wp_posts p
WHERE p.post_type = 'tutor_enrolled'
AND p.post_parent = YOUR_COURSE_ID
ORDER BY p.post_date DESC;
The tutor_enrolled table structure uses the standard wp_posts columns:
| Column | Maps To |
|---|---|
post_type |
Always tutor_enrolled |
post_parent |
Course post ID |
post_author |
Student user ID |
post_status |
Enrollment state (completed, cancel) |
post_date |
Enrollment timestamp |
For a complete reference, see our deep-dive: tutor_enrolled Post Type Explained.
Step 5: Recreate Certificates
LearnDash certificates don't transfer automatically.
- Go to Tutor LMS → Certificates
- Create a new certificate template
- Use the drag-and-drop builder to design it
- Add dynamic fields:
{student_name}{course_name}{completion_date}{certificate_url}
Note: Tutor LMS Pro is required for certificates.
Step 6: Configure Payment Integration
If you sell courses, connect your payment method and run a full test purchase. For WooCommerce, link each course to a product. For direct payments, enable your gateway in Tutor LMS and confirm pricing.
Step 7: Migrate Email Notifications
Enable the essential emails (enrollment, completion, and password reset) and send test messages. Update sender name, logo, and links so emails match your new course URLs.
Step 8: Update Course URLs and Redirects
If your course URLs are changing, set up 301 redirects:
Using Redirection Plugin
- Install the Redirection plugin
- Add redirects for each course:
/courses/old-learndash-course/ → /courses/new-tutor-course/
Using .htaccess
Add these lines to your .htaccess file:
Redirect 301 /courses/old-course-slug/ /courses/new-course-slug/
Step 9: Test Everything Thoroughly
Before deactivating LearnDash, test your Tutor LMS setup:
- Can students enroll in courses?
- Do lessons display correctly?
- Are quizzes functional?
- Do certificates generate properly?
- Are payment gateways working?
- Do email notifications send?
- Test on mobile devices
Create a test student account and go through the entire course experience.
Step 10: Deactivate LearnDash (But Don't Delete Yet)
Deactivate LearnDash and monitor for 14 days. Keep it installed for at least 30 days as a rollback option.
Common Migration Issues & Solutions
Students Can't Access Courses
Solution: Check enrollment status in Tutor LMS → Students. Manually re-enroll if needed.
Quizzes Not Saving Progress
Solution: Ensure quiz settings allow "Save Progress" and check that JavaScript isn't being blocked.
Certificates Not Generating
Solution: Verify Tutor LMS Pro is active and certificate templates are properly configured.
Feature Comparison: LearnDash vs Tutor LMS
| Feature | LearnDash | Tutor LMS Free | Tutor LMS Pro |
|---|---|---|---|
| Course Builder | ✅ | ✅ | ✅ |
| Quizzes | ✅ | ✅ | ✅ |
| Certificates | ✅ | ❌ | ✅ |
| Email Notifications | ✅ | ❌ | ✅ |
| Drip Content | ✅ | ❌ | ✅ |
| Prerequisites | ✅ | ✅ | ✅ |
| WooCommerce Integration | ✅ | ✅ | ✅ |
| Student Dashboard | ✅ | ✅ | ✅ |
| Annual Cost | $199+ | Free | $149 |
Post-Migration Optimization
After migration, focus on the highest impact improvements first:
- Enable course reviews to rebuild social proof
- Add prerequisites or drip content to guide student progress
When to Hire a Developer
Consider hiring help if:
- You have 100+ courses
- You have 500+ enrolled students
- You need to preserve student progress data
- You have complex custom integrations
- You're not comfortable with database queries
Related guides
- LearnDash vs Tutor LMS (2026)
- LearnDash to Tutor LMS SEO and Redirect Checklist
- Tutor LMS Post-Migration Setup Checklist
- Tutor LMS tutor_enrolled post type explained
- Quiz and Certificate Migration Checklist
- How to Check WordPress Plugin Compatibility
- How to Manually Backup a WordPress Site
FAQ
Will student progress migrate automatically?
No. Most migrations require manual handling for progress data. Plan for re-enrollment or a custom script if progress history is critical.
Should I keep LearnDash installed after migration?
Yes. Keep it deactivated but installed for at least 30 days so you can roll back if needed.
Do I need to update URLs?
If course URLs change, set 301 redirects before you go live. This protects rankings and avoids broken links.
Is it safe to migrate on a live site?
No. Always test on a staging site first, then move changes to production after validation.
What is the tutor_enrolled post type?
Tutor LMS stores enrollments as a custom post type called tutor_enrolled. If you’re exporting or scripting enrollments, this is the record type you’ll interact with. During migration, make sure new enrollments are created in Tutor LMS (rather than imported as LearnDash records), or students won’t show as enrolled.
Conclusion
Migrating from LearnDash to Tutor LMS requires effort, but the cost savings and modern features make it worthwhile for many course creators. The key is to:
- Plan thoroughly before starting
- Migrate courses systematically
- Test extensively before going live
- Keep LearnDash as a backup for 30 days
While there's no one-click migration solution, following this guide ensures a smooth transition with minimal disruption to your students.
Pro Tip: If you're running a large course site, consider migrating one course first as a pilot. Learn from that experience before migrating everything.
Frequently asked questions
Is there an automatic migration tool from LearnDash to Tutor LMS?
Tutor LMS offers a built-in migration tool that transfers basic course structure. However, quizzes, certificates, and custom integrations require manual migration.
What is the tutor_enrolled post type in Tutor LMS?
The tutor_enrolled custom post type stores enrollment records in the wp_posts table. Each record uses post_parent to link to the course ID, post_author for the student, and post_status for enrollment state (completed, cancel, etc.).
How does tutor_enrolled post_parent map to courses?
The post_parent field on each tutor_enrolled record contains the course post ID. Query with WP_Query using post_type tutor_enrolled and post_parent set to the course ID to get all enrollments for a course.
What table does tutor_enrolled use?
Enrollment data is stored in the standard wp_posts table with post_type set to tutor_enrolled. Additional metadata is stored in wp_postmeta. Tutor LMS does not use a separate custom table for enrollments.
Should I migrate on a staging site first?
Absolutely. Always perform the full migration on a staging environment first, test everything thoroughly, and only go live once you have verified all content and functionality.
What data does not migrate automatically?
Student progress, quiz attempts, certificates, custom email templates, and payment/subscription data typically need manual migration or recreation.
About the Author
Shoaib Zain
We test themes, plugins, and performance tactics to publish clear, trustworthy guides for WordPress and content sites.
Read more about us

