How to Auto-Enrol Students in the Next Course
You can auto subscribe students to the next course in LearnDash or TutorLMS using Krom Automation, and the free version is enough for a single trigger-to-enrolment workflow. No code is required, and the workflow fires in the background without touching page load times. LearnDash Pro is required for LearnDash; the free Krom Automation plugin handles TutorLMS course completion out of the box.
Most LMS sites handle progression manually. An admin gets notified, logs in, finds the student, and clicks enrol.
At low volume that is annoying. At 50 completions a week it is a part-time job, and it introduces a delay that kills momentum for the student who just finished and is ready to keep going.
This guide covers both LearnDash and TutorLMS, conditional enrolment rules, what the workflow cannot do, and the three failure modes that catch most people out.
Browse the full feature list to see everything Krom Automation can trigger on a course completion event before you build.
What Gets Synced: Course Completion to Enrolment
The table below shows exactly what fires during the trigger event and where it lands in the enrolment action. Nothing listed here requires custom code or a third-party integration service.
| Field on the trigger side | Where it lands in the enrolment action |
|---|---|
| Completed course ID | Used to match the “source” course in your workflow condition |
| Completing user ID | Passed to the enrolment action as the target user |
| User email address | Available as a merge tag for a confirmation email action |
| User display name | Available as a merge tag for personalised email or post creation |
| Completion timestamp | Logged in the execution record; can feed a delay node if you want a 24-hour gap before enrolment |
| Quiz score (LearnDash only) | Available as a merge tag; can drive a conditional branch to enrol or skip based on pass mark |
| User role | Available for conditional branching, so managers get a different next course than individual contributors |
The merge tags documentation lists every dynamic variable available at each trigger point, including the full set of LearnDash and TutorLMS fields.
Requirements Before You Start
- WordPress 6.2 or higher, PHP 7.4 or higher
- Krom Automation free plugin installed and active (handles TutorLMS triggers and basic LearnDash triggers)
- Krom Automation Pro required for conditional branching by quiz score, user role, or group membership, and for the LearnDash group enrolment action
- LearnDash 4.0 or higher, or TutorLMS 2.0 or higher
- Action Scheduler must be able to run; shared hosting with WP-Cron disabled will delay workflow execution
LearnDash Setup: Course Completion Triggers Next Enrolment
The LearnDash integration documentation covers every available trigger and action, but here is the exact path for a completion-to-enrolment workflow.
Step 1: Create a new workflow
Go to Krom Automation > Workflows in the WordPress admin sidebar. Click Add New Workflow.
Give it a name that identifies the source course, such as “Module 1 Complete: Enrol in Module 2”. Click Save to open the visual canvas.
Step 2: Add the trigger
Click the Add Trigger node on the canvas. In the trigger panel that slides open on the right, select LearnDash from the integration dropdown. Choose Course Completed from the trigger list.
In the Course field, search for and select the source course by name. Click Save Trigger.
Step 3: Add a condition (optional but recommended)
If you only want to enrol students who passed a final quiz with 80 percent or above, click the Add Condition button on the trigger node. Set Field to Quiz Score, Operator to greater than or equal to, and Value to 80. The canvas will split into a Yes path and a No path.
Drag your enrolment action onto the Yes path. The conditions and branching documentation explains how to stack multiple conditions if you need to check both score and user role.
Step 4: Add the enrolment action
Click Add Action on the Yes path (or directly on the trigger if you skipped the condition). Select LearnDash from the integration dropdown. Choose Enrol User in Course.
In the Course field, search for and select the destination course. In the User field, select Triggering User from the dynamic options. Click Save Action.
Step 5: Add a confirmation email (optional)
Click Add Action below the enrolment node. Select Send Email.
Set To to the merge tag {{user.email}}, set Subject to something like “You’ve been enrolled in {{course.title}}”, and write the body using any merge tag listed in the dynamic variable panel. If your emails are landing in spam, the guide on automated WordPress emails going to spam covers SMTP configuration and sender authentication steps.
Step 6: Enable and test
Toggle the workflow status to Active in the top-right corner of the canvas. Before going live, click Test Workflow to open the workflow simulator.
The simulator runs a dry-run with zero side effects, so no real enrolment fires and no email sends. Confirm all nodes show green, then save and exit.
TutorLMS Setup: Course Completion Triggers Next Enrolment
The process is almost identical. The TutorLMS integration documentation lists the full trigger and action set. The key difference is that TutorLMS does not expose quiz score as a merge tag in the same way, so conditional branching by score requires the Pro version and uses the Quiz Passed trigger rather than Course Completed.
Step 1: Create a new workflow
Go to Krom Automation > Workflows > Add New Workflow. Name it, for example “Foundation Complete: Enrol in Advanced”. Open the visual canvas.
Step 2: Add the trigger
Click Add Trigger, select TutorLMS from the integration dropdown, and choose Course Completed. In the Course field, select the source course. Click Save Trigger.
Step 3: Add the enrolment action
Click Add Action, select TutorLMS, and choose Enrol User in Course. Set Course to the destination course and User to Triggering User. Click Save Action.
Step 4: Enable and test
Set the workflow to Active. Use the simulator to confirm the workflow resolves correctly before any real student completes the source course.
A workflow that fires 30 minutes after completion because WP-Cron was asleep is not a failed workflow. It is a misconfigured server. The fix takes 5 minutes and lives outside WordPress entirely.
Conditional Enrolment: Beyond the Simple On/Off Trigger
Every competitor covering auto-enrolment treats it as a binary: completion fires, enrolment happens. That is the right starting point, but most L&D teams need more than that. Krom Automation’s conditional branching handles the three most common real-world variations.
Enrol by user role
Add a condition after the trigger. Set Field to User Role, Operator to equals, and Value to the role name, for example subscriber or a custom role like sales-rep.
Managers can branch to a leadership track course while individual contributors branch to a skills course. One workflow, two paths, zero manual sorting.
Enrol by quiz score threshold
Use LearnDash’s Quiz Passed trigger instead of Course Completed if you want score-based routing. Set a condition on Quiz Score with a threshold of your choosing.
Students above the threshold enrol in the advanced course; students below enrol in a remedial or review course. This is the setup most training managers eventually ask for, and it is not available in any plugin that treats auto-enrolment as a single toggle.
Enrol after a delay
Some courses benefit from a gap before the next enrolment so the student has time to apply what they learned. Add a Delay node between the trigger and the enrolment action.
Set it to 7 days or any interval. The delays and scheduling documentation covers every available unit including a custom number of seconds for precise timing.
Enrolment Decision Table: Which Setup Fits Your Situation
Use this table to find the right configuration before you build. Building the wrong one and refactoring costs 30 to 60 minutes per workflow.
| Your situation | Trigger to use | Condition needed | Pro required? |
|---|---|---|---|
| All completions enrol in the next course | Course Completed | None | No |
| Enrol only students who passed the final quiz | Quiz Passed (LearnDash) | Quiz Score >= pass mark | Yes |
| Different next course based on user role | Course Completed | User Role equals [role] | Yes |
| Enrol with a 7-day gap after completion | Course Completed | None, add Delay node | No (delay is free) |
| Enrol in multiple follow-on courses at once | Course Completed | None, add multiple Enrol actions | No |
| Enrol based on BuddyBoss group membership | Course Completed + Group check | Group membership condition | Yes |
| Notify a Slack channel on each enrolment | Course Completed | None, add messaging action | Yes (messaging is Pro) |
Treating auto-enrolment as a single on/off switch is how you end up with every student on the same path regardless of what they demonstrated they know.
What Does NOT Transfer (Read This Before You Build)
Every integration guide should include this section. Most do not, which is why people discover these limits the hard way.
- Course progress does not carry over. Enrolment in the new course starts at zero. Any completion percentage, quiz attempt, or assignment from the source course stays on the source course. There is no mechanism to migrate progress between courses in either LearnDash or TutorLMS, and Krom Automation does not change that.
- Course access duration is not inherited. If your destination course has an expiry set, that expiry clock starts from the enrolment date the workflow creates, not from the original purchase date. Students enrolled 6 months after the original purchase will have the same access window as a student enrolled on day one.
- Paid course restrictions are bypassed. Krom Automation’s enrolment action enrols at the plugin level, not through the payment gateway. A paid course that requires WooCommerce or a membership to access will have the enrolment record written but access may still be blocked by the payment restriction layer. Test this in staging before deploying to a paid course.
- Group enrolment is not the same as individual enrolment. Enrolling a user in a course does not add them to a LearnDash group. If your course progress, reporting, or certificates depend on group membership, add a separate group enrolment action in the workflow.
- TutorLMS certificate triggers do not fire on programmatic enrolment. If you use TutorLMS certificates tied to course completion, test whether the certificate hook fires correctly when enrolment comes from an automation rather than a student clicking “Start Course” manually.
Troubleshooting the Three Common Failure Modes
Failure mode 1: The workflow fires but enrolment does not appear
Check the execution log under Krom Automation > Logs. If the enrolment action shows a green tick but the student is not enrolled, the destination course has a paid or membership access restriction that is blocking the enrolment record from granting access.
The fix is to either remove the access restriction on the destination course, use a MemberPress or WooCommerce action to grant access first, or switch the course access mode in LearnDash from Buy Now / Subscribe to Open for programmatically managed courses. See the MemberPress integration documentation if membership is involved.
Failure mode 2: The workflow fires 20 to 40 minutes late
This is WP-Cron. Krom Automation uses Action Scheduler to run workflows in the background, which depends on WP-Cron firing. On a low-traffic site, WP-Cron only runs when someone visits the site.
If no visitor arrives for 30 minutes after a course completion, the workflow waits. The permanent fix is a real server cron job: add */5 * * * * php /path/to/wp-cron.php to your crontab and disable WP-Cron in wp-config.php by setting DISABLE_WP_CRON to true. That change takes under 5 minutes and makes every scheduled WordPress task reliable, not just Krom Automation workflows.
Failure mode 3: The workflow fires multiple times for the same student
Check the Run Once Per Entity setting in Workflow Settings. This setting prevents a workflow from firing more than once for the same user-course combination. If it is off, a student who re-takes a course or whose completion record is written twice by a plugin conflict will trigger multiple enrolments.
Enable Run Once Per Entity on any workflow where duplicate enrolment would cause problems. The workflow settings documentation explains the exact option and what entity matching covers.
Enrolling in Multiple Follow-On Courses at Once
A single trigger can drive multiple enrolment actions. On the workflow canvas, after the trigger node, add one Enrol User in Course action for each destination course. All actions run in sequence during the same execution.
There is no limit on the number of actions per workflow in the free version. A student completing a certification course can be simultaneously enrolled in 3 supplementary modules, added to a cohort email list, and sent a congratulations email, all from one workflow.
If you want different courses for different cohorts, use conditional branching rather than multiple workflows. One workflow with branching is easier to audit than 6 separate workflows that all watch the same trigger. The step-by-step workflow builder guide shows how to arrange multi-action and multi-branch flows on the canvas.
One workflow with conditional branching is always easier to maintain than six workflows watching the same trigger. Audit one, not six.
Automations Worth Pairing With Course Enrolment
Auto-enrolment on its own handles progression. Add the following actions to the same workflow to handle the full student experience without any manual intervention.
- Send Email: Notify the student of their new enrolment with a link to the course. Personalise with {{user.display_name}} and {{course.title}} merge tags.
- Update User Meta: Write the enrolment date to a custom user meta field for reporting or CRM sync.
- FluentCRM tag: Add a “Module 2 Enrolled” tag in FluentCRM to trigger a nurture sequence. See the FluentCRM integration documentation for exact field names.
- Slack notification: Alert a team channel when a student progresses, useful for cohort-based programmes where a manager tracks completion rates. The messaging integrations documentation covers Slack setup.
- HTTP Request: Push the enrolment event to an external BI tool or HR system using a webhook. No Pro licence needed for outgoing HTTP requests.
What This Costs: Free vs Pro for Auto-Enrolment Workflows
The free Krom Automation plugin handles a straight completion-to-enrolment workflow with no conditions. Most teams reach for Pro within a few weeks once they want role-based or score-based routing.
| Capability | Free | Pro |
|---|---|---|
| Course Completed trigger (LearnDash and TutorLMS) | Yes | Yes |
| Enrol User in Course action | Yes | Yes |
| Multiple enrolment actions per workflow | Yes | Yes |
| Delay node between completion and enrolment | Yes | Yes |
| Conditional branching by quiz score or user role | No | Yes |
| LearnDash group enrolment action | No | Yes |
| FluentCRM tag on enrolment | No | Yes |
| Slack or Discord notification on enrolment | No | Yes |
| Schedule trigger for bulk enrolment on a set date | No | Yes |
Pro plans start at $119 per year for a single site or $299 as a one-time lifetime licence. If you manage 5 or more sites the Standard plan at $199 per year works out to $40 per site annually, which is less than an hour of developer time for a single manual workflow build. See the full pricing breakdown for plan details.
Practical Numbers: What Manual Enrolment Actually Costs
On a site with 200 course completions per month, manual enrolment takes roughly 2 to 3 minutes per student if you are fast: locate the user, open their profile, find the course, click enrol, confirm. That is 400 to 600 minutes per month, or 7 to 10 hours.
At a $50 hourly rate for an admin or VA, that is $350 to $500 per month in labour. A lifetime Pro licence at $299 pays for itself in under one month at that volume.
Even at 30 completions per month, the mental overhead of checking a completion queue daily, deciding which course comes next, and tracking who has been processed costs more than the licence. The automation stack we deploy on every client build includes an LMS progression workflow as one of the first automations added, for exactly this reason.
Also from wpRigel
Pollify is our Gutenberg-native poll, survey and quiz plugin. Polls are built as real blocks inside the editor, so there is no shortcode to paste and no separate interface to manage. It works well alongside course content where you want to embed a quick knowledge check or learner satisfaction survey directly in a lesson page.
Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K to search everything and run admin actions without navigating menus.
For sites managing large student rosters, the ability to find a user, view their profile and open their course history in under 3 seconds is a genuine time saver. It is the only WordPress command palette with real WooCommerce order, product and customer commands built in.
Our Verdict: Who Should Build This Workflow Today
If you have a linear course structure where every student follows the same path, the free Krom Automation plugin sets this up in under 15 minutes and you never touch it again. That is the case for most course creators and most membership sites with a defined curriculum.
If your programme has branching paths, role-based tracks, or score-based routing, invest in Pro. The conditional branching alone saves more time than the licence costs, because the alternative is either manual sorting or a bespoke developer build that costs $500 to $2,000 and breaks when the LMS plugin updates.
Who should wait: if you are still building the courses themselves and have fewer than 10 active students, set up the workflow once the content is stable. Automating a half-finished curriculum creates enrolment records in courses that do not exist yet, which generates support tickets from confused students. Build the automation the week before you open enrolment, not the week you start writing content.
Download the free plugin from the WordPress.org plugin directory and install it in under 3 minutes, or compare the Pro plans if conditional branching is on your list.
FAQ
Does auto-enrolment work if the follow-on course is a paid course?
Krom Automation writes the enrolment record at the plugin level. If the destination course is set to open access in LearnDash or TutorLMS, the student gets in.
If it is restricted to paying members or WooCommerce purchasers, the enrolment record may be blocked by the access layer even though the workflow ran successfully. Test in staging with your exact access mode before using this on a paid course.
Can one completion trigger enrolment in several courses at once?
Yes. Add one Enrol User in Course action for each destination course on the same workflow canvas.
All actions run in the same execution. There is no limit on the number of actions per workflow in either the free or Pro version.
What happens if a student completes the source course twice?
Enable Run Once Per Entity in the workflow settings. This prevents the workflow from firing more than once for the same user-course pair, so a student who re-completes a course or whose completion record is written twice does not receive a duplicate enrolment in the follow-on course.
Will the workflow still fire if my site has very low traffic?
It will fire, but possibly late. Krom Automation uses Action Scheduler, which depends on WP-Cron.
On low-traffic sites, WP-Cron only triggers when someone visits. Configure a real server cron job to run every 5 minutes and disable WP-Cron in wp-config.php to make execution timing reliable regardless of traffic levels.
Can I auto-enrol students in a course based on their job role rather than a course they completed?
Yes, with Pro. Use the User Role Changed trigger or a User Registered trigger combined with a condition that checks the assigned role.
If the role matches, the enrolment action fires. This is the standard setup for onboarding new employees into a required training track automatically when their account is created with the correct role.