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 sideWhere it lands in the enrolment action
Completed course IDUsed to match the “source” course in your workflow condition
Completing user IDPassed to the enrolment action as the target user
User email addressAvailable as a merge tag for a confirmation email action
User display nameAvailable as a merge tag for personalised email or post creation
Completion timestampLogged 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 roleAvailable 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 situationTrigger to useCondition neededPro required?
All completions enrol in the next courseCourse CompletedNoneNo
Enrol only students who passed the final quizQuiz Passed (LearnDash)Quiz Score >= pass markYes
Different next course based on user roleCourse CompletedUser Role equals [role]Yes
Enrol with a 7-day gap after completionCourse CompletedNone, add Delay nodeNo (delay is free)
Enrol in multiple follow-on courses at onceCourse CompletedNone, add multiple Enrol actionsNo
Enrol based on BuddyBoss group membershipCourse Completed + Group checkGroup membership conditionYes
Notify a Slack channel on each enrolmentCourse CompletedNone, add messaging actionYes (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.

CapabilityFreePro
Course Completed trigger (LearnDash and TutorLMS)YesYes
Enrol User in Course actionYesYes
Multiple enrolment actions per workflowYesYes
Delay node between completion and enrolmentYesYes
Conditional branching by quiz score or user roleNoYes
LearnDash group enrolment actionNoYes
FluentCRM tag on enrolmentNoYes
Slack or Discord notification on enrolmentNoYes
Schedule trigger for bulk enrolment on a set dateNoYes

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.