How to Give Course Access After a WooCommerce Purchase

To give course access after a WooCommerce purchase, use Krom Automation with the Order Completed trigger and an LMS enrollment action. The free plugin handles LearnDash and Tutor LMS enrollment plus a plain-text welcome email.

If you want a branded HTML welcome email or need to handle subscription renewals, you will need Pro. Setup takes under 15 minutes once the LMS and WooCommerce are already running.

Every other result you will find for this question focuses on the LearnDash WooCommerce add-on settings and stops there. That native setup works, but it does not handle refunds, it does not send a customisable welcome email, and it breaks silently when an order gets stuck in Processing instead of moving to Completed. This article covers all three problems.

We will walk through the full workflow: Order Completed to enrollment, welcome email with merge tags, access revocation on refund, and what to do when enrollment does not fire. We also cover Tutor LMS as a genuine alternative to LearnDash, because most guides do not.

Browse the full Krom Automation feature list to see every trigger and action available before you start building.

Quick Summary

What you need to doFree or Pro?Time to set up
Enroll buyer in LearnDash course on Order CompletedFree5 minutes
Enroll buyer in Tutor LMS course on Order CompletedFree5 minutes
Send plain-text welcome email with course linkFree5 minutes
Send branded HTML welcome emailPro10 to 20 minutes
Revoke access when order is refundedFree5 minutes
Handle subscription renewals and cancellationsPro10 minutes
Enroll in multiple courses from one product purchaseFree5 minutes per course

Does the Buyer Need an Account to Get Course Access?

Yes. Every LMS we are aware of, including LearnDash and Tutor LMS, ties course enrollment to a WordPress user record. There is no such thing as guest course access because the LMS needs a user ID to track progress, quiz scores, and completion certificates.

This means guest checkout is incompatible with automatic enrollment. If a buyer completes an order without creating an account, there is no user record for the LMS to attach the course to. The enrollment action will either fail silently or throw an error depending on which LMS you are running.

The fix is to require account creation at checkout. In WooCommerce, go to Settings, then Accounts and Privacy, and enable “Require an account to checkout” along with “Allow customers to create an account during checkout.” That one change eliminates the most common reason enrollment fails after payment.

Why Order Completed, Not Order Processing?

WooCommerce moves an order through several statuses: Pending, Processing, On Hold, Completed, Cancelled, Refunded, and Failed. Processing means payment was received but the order has not been fulfilled yet. Completed means the seller has marked it fulfilled.

For digital products and courses, WooCommerce can be configured to jump straight from Processing to Completed automatically. Go to WooCommerce, then Settings, then Products, then the Downloadable Products section, and set the grant access setting to “Completed” orders. With that in place, a successful card payment triggers the Completed status within seconds and your enrollment workflow fires immediately.

If you trigger enrollment on Processing instead, a buyer who pays with a bank transfer or a payment method that takes time to clear could get course access before funds arrive. That is an edge case worth knowing about before you decide which status to use.

How to Build the Enrollment Workflow in Krom Automation

The steps below apply to both LearnDash and Tutor LMS. The trigger is the same. Only the action changes depending on which LMS you are running.

  1. Install Krom Automation from the WordPress.org plugin directory. Activate it. No configuration is needed before building your first workflow.
  2. Go to Krom Automation, then Workflows, then Add New. Give the workflow a name you will recognise, such as “Course Access on Purchase.”
  3. On the canvas, click Add Trigger and select Order Completed from the WooCommerce trigger group. You can optionally filter by specific product ID so the workflow only fires for buyers of that course product.
  4. Click Add Action and choose either LearnDash: Enroll User in Course or TutorLMS: Enroll User in Course, depending on your LMS. Map the User ID and Course ID fields. Use merge tags to pull the buyer’s user ID from the trigger data automatically.
  5. Add a second action: Send Email. Set the recipient to the buyer’s email using a merge tag, write a subject line, and paste your welcome message in the body. Reference the merge tags documentation for the full list of dynamic variables you can insert, including order number, course name, and login URL.
  6. Save and activate the workflow. Use the workflow simulator to run a dry test before going live. The simulator triggers the full logic without creating a real order or sending a real email.

The LearnDash integration documentation covers every available trigger and action in detail, including group enrollment and course completion events. The Tutor LMS integration documentation does the same for Tutor LMS, including quiz triggers.

The workflow simulator is the most underused feature in the plugin. Running a dry test before your first real order costs nothing. Discovering silent enrollment failures after 50 sales costs a lot of time and a lot of support tickets.

Sending a Welcome Email That Actually Gets Read

The default Send Email action in the free plugin outputs plain text. For most course sellers that is fine. The email arrives, it contains the login URL, the buyer knows what to do next.

If you want a branded HTML email with a button, a logo, and formatted course details, the visual email builder is a Pro feature. It is block-based and powered by the Gutenberg editor, so you build the email in the same interface you use to write posts. No HTML knowledge required.

Whichever version you use, include these four things in the welcome email:

  • The login URL so the buyer can access the site immediately, not hunt for it
  • The course name, pulled dynamically via merge tag so one workflow covers any product
  • The order number, so buyers can reference it in a support query without you having to ask
  • A direct link to the course page so the buyer does not have to navigate after logging in

If you are also syncing buyers to an email marketing list, chain that as a third action in the same workflow. Krom Automation integrates with Mailchimp, FluentCRM, ConvertKit, and several other email platforms. One trigger, three or four actions, all running in sequence without any additional plugins.

How to Revoke Access When an Order Is Refunded

This is the section every other guide skips. A buyer requests a refund, you process it in WooCommerce, the order status changes to Refunded. Without an automation, the buyer still has access to every lesson they downloaded or watched.

The fix is a second workflow using the Order Status Changed trigger. Set the condition to fire when status changes to Refunded, then add an unenrollment action for the same course. That workflow runs automatically whenever a refund is processed, with no manual step required.

The exact actions available depend on your LMS. LearnDash exposes an unenroll action.

Tutor LMS handles it through a course enrollment status update. Check the relevant integration documentation for the exact field names before building this workflow.

You can also add a delay before the unenrollment action if your refund policy gives buyers a grace period, for example 24 hours after the refund is processed before access is removed. That avoids a situation where a buyer requests a refund, changes their mind within an hour, and finds their account already locked out.

What to Do When Enrollment Does Not Fire

Silent enrollment failure is the most common support question for any WooCommerce-to-LMS setup. The order shows Completed in WooCommerce.

The buyer has no course access. Here is how to diagnose it in order of likelihood.

SymptomMost likely causeFix
Order is Completed but user has no accessBuyer checked out as guest, no user record existsEnable account required at checkout in WooCommerce settings
Workflow shows as triggered but enrollment action failedUser ID or Course ID mapped incorrectly in the actionCheck merge tag output in the execution log for the failed run
Order stuck in Processing, never moves to CompletedDigital product not set to auto-complete ordersEnable auto-complete for virtual and downloadable products in WooCommerce
Workflow never triggered at allWorkflow is paused or the trigger filter excludes this productCheck workflow status and product filter in the trigger settings
Enrollment fires but welcome email not receivedEmail delivery issue, not an automation issueCheck server mail logs or switch to an SMTP plugin
Delayed enrollment on low-traffic sitesWP-Cron fired late because no visitors triggered itSet up a real server cron job pointing at wp-cron.php

Krom Automation logs every workflow execution with a full per-step audit trail. When enrollment fails, open the execution log for that run and look at which action failed and what data it received.

That single view usually identifies the problem in under 2 minutes. No other free WordPress automation plugin includes this level of per-step logging without a paid upgrade.

An order stuck in Processing is not a payment problem. It is a configuration problem. Nine times out of ten, enabling auto-complete for virtual products is all it takes to clear the backlog.

LearnDash vs Tutor LMS: Which Works Better With This Setup?

Both LMS platforms work with this workflow. The differences are in what each exposes for automation, not whether the connection works.

CapabilityLearnDashTutor LMS
Enroll user in course actionYesYes
Unenroll user on refundYesYes (via enrollment status update)
Trigger on course completionYesYes
Trigger on quiz passed or failedYesYes
Group enrollmentYesNo, course level only
Native WooCommerce add-on (without Krom)Yes, paid add-onYes, built in
Cost of native WooCommerce add-onIncluded in LearnDash Pro plansIncluded free

LearnDash group enrollment is worth highlighting specifically. If you sell a product that should enroll the buyer in multiple courses at once, the LearnDash group action in Krom Automation handles that in a single action node. You do not need to chain multiple enrollment actions or duplicate the workflow.

Selling Multiple Courses as a Bundle

One WooCommerce product can map to multiple course enrollments. The approach depends on your LMS.

  • LearnDash groups: Create a LearnDash group containing all the courses in the bundle. Use the “Enroll User in Group” action instead of the individual course action. One action node enrolls the buyer in every course in the group simultaneously.
  • Tutor LMS without groups: Add one enrollment action per course in the workflow. Three courses in a bundle means three sequential action nodes after the trigger. Each takes under a second to execute.
  • WooCommerce product variations: If different variants of a product grant access to different courses, use conditional branching in the workflow. Add a Yes/No branch after the trigger checking which variation was purchased, then route to the appropriate enrollment action. The conditions and branching documentation explains how to set this up.

Handling WooCommerce Subscriptions

If you sell course access as a recurring subscription rather than a one-time purchase, the Order Completed trigger only fires once. You also need to handle renewal payments (re-confirm access) and cancellations (revoke access).

Krom Automation Pro includes a WooCommerce Subscriptions integration with dedicated triggers for subscription renewal, suspension, and cancellation. That is a separate workflow from the initial purchase workflow, and it is a Pro-only feature. If subscriptions are part of your course business model, factor that into your plan decision.

For a broader view of what changes between the free plugin and Pro, the free vs Pro comparison lists every difference in one place.

A subscription cancellation workflow that revokes course access automatically is not a nice-to-have. It is the difference between a clean business and a support queue full of access disputes.

What the Marketing Pages Do Not Tell You

Every automation plugin lists its triggers and actions. Here is what the feature lists leave out.

  • WP-Cron timing on low-traffic sites: Krom Automation runs actions via Action Scheduler, which depends on WordPress Cron. On a site that receives one visitor every few hours, WP-Cron may not fire for 30 to 90 minutes after an order completes. The buyer waits that long for their welcome email and their course access. Fix: configure a real server cron job to call wp-cron.php every 5 minutes. Your hosting panel or a server admin can set this up in under 10 minutes.
  • Merge tag data availability: Not every piece of order data is available as a merge tag in every action. If you need a custom field from your checkout form in the welcome email, verify it is exposed before you build the workflow around it.
  • LMS plugin version requirements: The Krom Automation LearnDash integration requires LearnDash 4.0 or higher. Older installations may not expose all the required hooks. Check your LMS version before troubleshooting an enrollment that will not fire.
  • Order status customisation: Some payment gateways add custom statuses between Processing and Completed. If your gateway uses a status like “Awaiting confirmation,” the Order Completed trigger will not fire until WooCommerce sees its own Completed status. You may need to configure the gateway to auto-complete, or use an Order Status Changed trigger for your gateway’s specific status.

What This Costs Compared to Doing It Manually

A manual enrollment process for a course with 50 students a month looks roughly like this: check the order, find the user, enroll them in the LMS, send a welcome email. At 3 to 5 minutes per student, that is 150 to 250 minutes of admin per month. At an agency billing rate of $75 an hour, that is $187 to $312 a month in staff time, every month.

Krom Automation Pro starts at $69 a year, or $199 as a one-time lifetime payment. The automation pays for itself in the first month if even one person’s time is freed up. The full pricing breakdown covers all three plans and the lifetime options.

For sites with fewer than 50 course buyers a month, the free plugin handles enrollment and welcome emails without any cost at all. There is no run cap, no execution limit, and no feature locked away after a trial period.

Also from wpRigel

Pollify is a Gutenberg-native poll, survey, and quiz plugin. Polls are built as real blocks inside the WordPress editor, no shortcodes and no separate admin interface. If you run a course site and want to embed knowledge checks or learner feedback surveys directly in your content, Pollify fits without any extra setup.

Commandify is a command palette for the WordPress admin. Press Cmd or Ctrl plus K to jump to any page, search orders, or run admin actions without clicking through menus. It is the only WordPress command palette with real WooCommerce order, product, and customer commands built in, which makes it particularly useful for anyone managing a course store.

Our Verdict

If your WooCommerce store sells courses and you are still enrolling students by hand, that is a fixable problem and fixing it takes less than 30 minutes. The free Krom Automation plugin covers the full enrollment and welcome email workflow at no cost. Pro adds the visual email builder, subscription handling, and the richer trigger data you need for more complex setups.

Start with the free plugin. Build the Order Completed to enrollment workflow. Test it with the simulator before you go live.

Add the refund unenrollment workflow as a second pass. The automation will run reliably in the background from that point forward, and your support queue will be lighter for it.

Download the free plugin from the WordPress.org plugin directory and build your first enrollment workflow today. When you are ready to see what Pro adds, the pricing page covers all plans with a 14-day money-back guarantee on every purchase.

Frequently Asked Questions

Can I give course access when the order status is Processing instead of Completed?

You can, but we recommend against it for most setups. Processing means payment intent was received, not that funds have cleared.

For payment methods that can fail or reverse after the initial Processing status, such as bank transfers or certain regional gateways, triggering enrollment on Processing risks granting access that you then have to revoke. Use Completed for digital course products and configure WooCommerce to auto-complete virtual and downloadable orders so the gap between payment and completion is zero.

What happens if the buyer does not have a WordPress account at checkout?

The enrollment action will fail because the LMS has no user record to attach the course to. Require account creation at checkout in WooCommerce Settings, then Accounts and Privacy. With that enabled, WooCommerce creates a user account as part of the checkout flow, and the enrollment workflow has a valid user ID to work with.

Does this work with Tutor LMS as well as LearnDash?

Yes. Krom Automation has a dedicated Tutor LMS integration with enrollment, completion, and quiz triggers.

The workflow structure is identical to the LearnDash version. The only difference is that Tutor LMS does not support group enrollment, so a bundle of three courses requires three sequential enrollment action nodes rather than one group enrollment action.

Will enrollment be delayed if my site has very low traffic?

Potentially, yes. Krom Automation uses Action Scheduler, which depends on WordPress Cron. WordPress Cron fires when a visitor loads a page.

On a site with very low traffic, there may be a gap of 30 minutes or more between when an order completes and when the scheduled action fires. Configuring a real server cron job to call wp-cron.php every 5 minutes eliminates this delay entirely.

Can I enroll a buyer in multiple courses with one WooCommerce product?

Yes. For LearnDash, use the group enrollment action and assign all courses to the group in advance.

For Tutor LMS, add one enrollment action node per course in the same workflow. Both approaches run from a single Order Completed trigger and complete in seconds.

Is there a way to test the enrollment workflow before real orders come in?

Yes. Krom Automation includes a workflow simulator that runs the full logic, including trigger evaluation and action sequencing, without executing any real side effects.

No order is created, no email is sent, and no enrollment is written to the LMS. It is the safest way to confirm the workflow is configured correctly before you take your first real payment.