Free Trial Documentation

Documentation โ€” Tutor LMS Free Trial
Tutor LMS Free Trial โ€” Documentation
Plugin Documentation

Tutor LMS
Free Trial

Everything you need to set up and manage time-limited free trials for your Tutor LMS courses and bundles. Covers installation, configuration, the student trial experience, eligibility rules, and troubleshooting.

๐Ÿ“ฆ Version 2.2.42 ๐Ÿ”Œ Requires: WooCommerce + Tutor LMS ๐Ÿ“ฆ Bundle support with Tutor Pro

Ready to get started?

One-time payment of $149 ยท Lifetime updates ยท Secure checkout via WooCommerce

Purchase the Plugin โ€” $149 โ†’
Section 1

Overview

Tutor LMS Free Trial adds time-limited, zero-cost trial access to Tutor LMS courses and bundles sold through WooCommerce. Administrators enable a trial on any course or bundle, set the duration in days, and the plugin handles everything else โ€” creating a hidden $0 WooCommerce product, managing enrollments, sending expiration emails, and automatically revoking access when the trial ends.

A strict one-trial-per-student-per-course policy is enforced throughout, with a full admin interface for monitoring all trials and granting resets when needed.

Key features at a glance

  • Enable trials per course or bundle with a configurable duration of 1โ€“365 days
  • Auto-creates a hidden $0 WooCommerce product for each trial-enabled course โ€” no manual setup
  • Displays a “Start Free Trial” button above the purchase button on course and bundle pages
  • Active trial shows a notice with days remaining and an Upgrade Now button
  • Hourly cron automatically expires trials and revokes course access when the end date passes
  • Seamless conversion when a student purchases the full course during or after their trial
  • Full course bundle support โ€” a single bundle trial enrolls the student in every course inside
  • Admin panel under Tutor LMS โ†’ Free Trials for monitoring, cancelling, and resetting trials
  • Shortcode and Elementor widget for embedding the trial button anywhere
  • Integrates with Tutor LMS Installments and WooCommerce Memberships for Tutor LMS
Section 2

Requirements

Minimum requirements

ComponentMinimum version
WordPress5.8 or higher
PHP7.4 or higher
WooCommerce6.0 or higher
Tutor LMS2.0 or higher (Free or Pro)

Recommended environment

  • PHP 8.0 or higher for improved performance
  • Latest stable WordPress and WooCommerce releases
  • Tutor LMS Pro โ€” required for course bundle support
  • Elementor โ€” for the Free Trial Button widget
  • SMTP plugin โ€” for reliable trial expiration email delivery
  • SSL certificate on the site

Optional integrations

  • Tutor LMS Installment Payments (Ksajie) โ€” enables installment plan upgrade options inside the active trial notice
  • WooCommerce Memberships for Tutor LMS (Ksajie) โ€” membership course access automatically converts an active trial to purchased status
Section 3

Installation

Method 1: WordPress admin upload (recommended)

  1. Log in to your WordPress admin and navigate to Plugins โ†’ Add New โ†’ Upload Plugin
  2. Choose the tutor-lms-free-trial.zip file and click Install Now
  3. Click Activate Plugin
  4. Navigate to Tutor LMS โ†’ TFT License to enter and activate your license key

Method 2: Manual FTP installation

  1. Extract the ZIP and upload the tutor-lms-free-trial folder to /wp-content/plugins/
  2. In WordPress admin, activate Tutor LMS Free Trial under Plugins
  3. Enter your license key on the TFT License page

What happens on activation

  • The wp_tutor_free_trials database table is created automatically
  • The hourly expiration cron event is scheduled
  • A backward compatibility migration runs: existing enrollments without a source tag are tagged as “individual” so the plugin never accidentally revokes them
  • Rewrite rules are flushed
Section 4

Enabling Free Trial on a Course or Bundle

Via Classic Editor (courses & bundles)

  1. Open the course or bundle edit screen in WordPress admin
  2. Locate the Free Trial meta box in the sidebar
  3. Check Enable Free Trial
  4. Set Trial Duration (Days) โ€” default is 7 days, range is 1โ€“365
  5. Publish or Update the course/bundle

Via Tutor LMS Course Builder or Bundle Builder

  1. Open the course or bundle in the Tutor LMS builder
  2. A floating Free Trial panel appears in the builder interface
  3. Toggle Enable Free Trial and enter the duration in days
  4. Save or Update โ€” settings sync automatically with the course meta

What the plugin creates automatically

When a free trial is enabled on a course or bundle, the plugin automatically creates a hidden WooCommerce product with a $0 price, marked as virtual and sold individually, with catalog visibility set to hidden. This product is used to run trials through the standard WooCommerce cart and checkout flow. If this product is ever deleted or unpublished, the plugin recreates it automatically on the next page load.

Section 5

Student Trial Flow

Starting a trial (individual course)

  1. Student visits the course page and sees the Start Free Trial button above the purchase button
  2. Clicking the button adds the $0 trial product to the WooCommerce cart
  3. At checkout, the plugin re-validates eligibility โ€” license active, trial enabled, student hasn’t used a trial for this course before
  4. On order completion, the trial record is created and the student is enrolled in the course immediately
  5. $0 orders auto-complete โ€” no payment step is needed for the student

Starting a trial (bundle)

  1. Student clicks Start Free Trial on the bundle page
  2. At checkout, eligibility is checked across the entire bundle โ€” blocked if the student has trialed the bundle or any course inside it before
  3. On order completion, a bundle trial record is created, then individual trial records are created for each course in the bundle with the same duration
  4. Courses the student already purchased individually are skipped โ€” their existing access is left untouched
  5. Student is enrolled in all bundle courses immediately

During an active trial

  • The course page shows an Active Trial notice with the number of days remaining and the exact expiry date
  • An Upgrade Now button links directly to the full purchase product
  • If the Installments plugin is active, installment plan options also appear inside the active trial notice
  • For bundle trials, a “Purchase to keep access” message is shown on each course page directing the student to the bundle page
  • The student has full access to all course content during the trial period
Section 6

Trial Eligibility Rules

The plugin enforces a strict one-trial-per-student-per-course policy. Eligibility is checked both when the button is displayed and again at checkout to prevent any manipulation.

For individual courses

SituationTrial button shown?
Student has no record for this courseYes
Student has a direct-purchase record (bought full access)No โ€” UI hidden entirely
Student has an active trialNo โ€” Active Trial notice shown
Student has an expired or cancelled trialNo โ€” Trial Ended notice shown
Student has a converted trialNo โ€” UI hidden entirely
Student trialed this course as part of a bundleNo โ€” Trial Ended notice shown
Admin reset the trialYes โ€” button shown again

For bundles

SituationTrial button shown?
Student has no record for this bundle and no record for any course in itYes
Student has a direct-purchase record for the bundleNo
Student has actually trialed any course in the bundle (not just direct-purchased)No โ€” blocked
Student previously trialed a course from this bundle individuallyNo
Student directly purchased individual courses (without trialing them)Yes โ€” direct purchases don’t block a bundle trial
Section 7

Trial States

Each trial record has one of six statuses that determine what the student sees and whether they can start a new trial.

StatusMeaningTrial button shown?
activeTrial is running; student has full course accessNo โ€” Active Trial notice shown instead
expiredTrial end date passed; cron revoked enrollmentNo โ€” Trial Ended notice shown
cancelledAdmin manually cancelled the trialNo โ€” Trial Ended notice shown
convertedStudent purchased full access during or after trialNo โ€” UI hidden completely
direct-purchaseStudent bought without a trial, or was enrolled by adminNo โ€” UI hidden completely
resetAdmin reset the record; student may trial againYes โ€” button shown again
Section 8

Expiration & Automation

Trial expiration is fully automated via an hourly background cron job. No manual intervention is required once a trial is active.

How the cron works

Every hour, the plugin scans for active trial records where the end date has passed. For each expired trial it:

  • Updates the trial status to “expired”
  • Revokes the student’s course enrollment (sets the enrollment post status to “cancel”)
  • For bundle trials: processes each course in the bundle individually and also cancels the individual course-level trial records
  • Sends an expiration email to the student with the course name and a direct purchase link
  • Adds a note to the associated WooCommerce order
โ„น๏ธ

The cron event is self-healing โ€” if it is ever missing from the WordPress schedule, the plugin automatically re-registers it. For production sites with WP-Cron disabled, set up a real server cron to call wp-cron.php every hour to ensure timely expiration.

Section 9

Purchase Conversion

When a student purchases the full course or bundle, the plugin seamlessly converts their trial record regardless of the trial’s current state.

Conversion scenarios

  • Purchase during active trial โ€” trial status is set to “converted” and the enrollment source is updated from “free_trial” to “purchase”. The student retains uninterrupted access.
  • Purchase after trial expired or was cancelled โ€” trial status is still set to “converted” and the standard Tutor LMS purchase flow re-enrolls the student.
  • Purchase with no prior trial โ€” a “direct-purchase” record is created for this student and course, permanently blocking future trial eligibility.
  • Membership access granted โ€” when the WooCommerce Memberships plugin grants course access, the plugin treats this as a conversion too.
Section 10

Bundle Support

Course bundles (Tutor LMS Pro) receive full first-class support. Enabling a free trial on a bundle applies to the entire bundle โ€” all courses inside are included in a single trial.

How bundle trials work

  • A single bundle trial record is created along with individual course trial records for every course in the bundle, all sharing the same trial duration
  • Courses the student already purchased individually are skipped โ€” their existing enrollment and access are never touched
  • Bundle-created course trials are flagged as “Managed by bundle” in the admin โ€” they cannot be cancelled or managed individually, only through the parent bundle trial record
  • On expiration, all course enrollments tagged as trial-sourced are revoked atomically as a single operation

Multi-bundle protection

A student who trialed any course inside a bundle cannot trial that bundle again. Conversely, if a student trialed a bundle, they cannot then trial any of the individual courses inside it separately. Direct purchases of individual courses (without having trialed them) do not block a bundle trial.

โš ๏ธ

Bundle support requires Tutor LMS Pro. The course-bundle post type and Bundle Builder are Pro features.

Section 11

Admin Management

Navigate to Tutor LMS โ†’ Free Trials to access the admin interface.

Free Trials page

Displays a filterable, searchable table of all trial records. You can filter by status (All, Active, Expired, Cancelled, Converted, Direct Purchase) and search by student display name or login. Each row shows the student, course, item type, start and end dates, days remaining, and a color-coded status badge.

Cancel action

Available for active trials. Cancelling a trial immediately revokes the student’s enrollment and sets the trial status to “cancelled”. For bundle-created course trial records, the cancel button is hidden โ€” these must be managed through the parent bundle trial row.

Reset action

Available for expired and cancelled trials. Resetting a trial allows the student to start a new free trial for that course or bundle by setting the status to “reset” and making the trial button visible again on the course page.

โš ๏ธ

Reset does not re-enroll the student. They must click the “Start Free Trial” button again themselves to begin the new trial.

Section 12

Plugin Integrations

Tutor LMS Installment Payments

When the Installments plugin is active and the full course product has installment plans configured, an upgrade form with installment plan options appears directly inside the active trial notice on the course page. Students can choose to convert their trial to an installment payment plan without leaving the course page.

WooCommerce Memberships for Tutor LMS

When a student’s membership grants them access to a course they are currently trialing, the trial is automatically converted โ€” status set to “converted” and enrollment source updated to “purchase”. This prevents any awkward state where a student holds both an active trial and an active membership for the same course.

Section 13

Shortcode & Elementor Widget

[tutor_free_trial]
Renders the full free trial UI anywhere on your site โ€” including the trial button, active trial notice, and trial-ended notice. Respects all eligibility rules automatically.
course_id Optional. Specify a course or bundle ID to display the trial UI for. Falls back to the current page’s post ID if not set.

Elementor widget

A Free Trial Button widget is available in Elementor for drag-and-drop placement anywhere on a page. Widget controls include: button text, toggle to show/hide the trial duration, toggle to show/hide the separator between the trial button and the purchase button, button color, and text color. The widget respects all trial eligibility rules automatically.

โ„น๏ธ

Both the shortcode and the widget automatically enqueue the necessary frontend CSS โ€” no manual script or style registration is needed.

Section 14

Frequently Asked Questions

No. Once a student has used a trial for a course โ€” regardless of whether it’s active, expired, cancelled, or converted โ€” they are permanently blocked from a new trial for that course. The only way to allow a student to trial again is for an admin to use the Reset button in the Free Trials admin page.
Yes. Use the Reset button in the Free Trials admin page (Tutor LMS โ†’ Free Trials) next to the student’s expired or cancelled trial record. After resetting, the trial button will reappear on the course page for that student and they can start a fresh trial. Note that reset does not re-enroll them automatically โ€” they need to click the trial button themselves.
No โ€” it converts it. When the student’s WooCommerce order for the full course completes, the trial status is set to “converted” and the enrollment source is updated to “purchase”. The student retains uninterrupted access and is treated as a full paying student from that point on.
Yes, for individual courses. The free version of Tutor LMS is fully supported. Bundle support, however, requires Tutor LMS Pro since course bundles and the Bundle Builder are Pro-only features.
Yes, if the Tutor LMS Installment Payments plugin (by Ksajie) is also active. When a student has an active trial, the Active Trial notice on the course page will display the available installment plan options so the student can convert directly to an installment plan without leaving the course.
Partially. When a student trials a bundle, individual course trial records are created for every course in the bundle. This prevents the student from subsequently starting a separate individual trial for any course they already trialed as part of the bundle. However, a student who directly purchased (not trialed) individual courses can still trial a bundle containing those courses.
Deactivation removes the hourly cron job and flushes rewrite rules. Existing enrollments and trial records remain in the database completely untouched โ€” no data is deleted on deactivation. Upon reactivation, the cron is rescheduled and everything continues from where it left off.
Navigate to Tutor LMS โ†’ Free Trials in the WordPress admin. The page is accessible to anyone with the standard Tutor LMS instructor/admin capability (manage_tutor).
Section 15

Troubleshooting

Before reporting an issue, enable WordPress debug logging by adding the following to your wp-config.php:

๐Ÿ’ก

All plugin log entries are prefixed with [TFT], [TFT Bundle], [TFT Cron], [TFT Admin], or [TFT Migration] for easy filtering in your debug log.

! Trial button not showing on course page

Check the following in order:

  • Verify the license is active โ€” navigate to Tutor LMS โ†’ TFT License and confirm it shows “Valid” in green
  • Confirm free trial is enabled for the course (check the Free Trial meta box in the course editor)
  • Make sure the course is published โ€” draft and private courses do not show the trial button
  • Check that the student is not already enrolled, does not have a direct-purchase record, and has not previously used a trial for this course or via a bundle
  • Check the browser console for JavaScript errors that may prevent the fallback UI injection
! Trial enrolls but access is immediately lost

This usually indicates a date or duration issue. Verify:

  • Check the trial record in Tutor LMS โ†’ Free Trials โ€” confirm the end date is set correctly to start date plus the configured trial days
  • Confirm that _tft_trial_days is correctly saved on the course post (check via a post meta viewer plugin)
  • Check whether the hourly cron ran immediately after enrollment on a heavily cached host โ€” this is rare but possible
! Trial not expiring automatically

The hourly cron must be running. Verify:

  • Use the WP Crontrol plugin to check scheduled events โ€” look for tft_hourly_expiration_check. If missing, deactivate and reactivate the plugin to re-register it
  • Check that DISABLE_WP_CRON is not set to true in your wp-config.php
  • On production sites with WP-Cron disabled, set up a real server cron job to call wp-cron.php every hour
  • Check the debug log for [TFT Cron] entries to confirm the cron is actually running
! Trial product deleted or 404 on “Add to Cart”

The trial product is recreated automatically on every page view if it is missing or unpublished. If the product is in the trash:

  • Manually restore it from WooCommerce โ†’ Products by searching for “Free Trial โ€“ [Course Name]”
  • After restoring, the product ID link on the course is restored automatically on the next page load
! Bundle trial not enrolling in all courses

Verify:

  • Ensure Tutor LMS Pro is active โ€” bundles are a Pro-only feature
  • Confirm bundle-course-ids is populated on the bundle post (inspect with a meta viewer plugin)
  • Check the debug log for [TFT Bundle] entries โ€” every course enrollment attempt is logged individually
! Course builder not saving free trial settings

Check the debug log for [TFT] save_course_meta triggered for course: X entries to confirm the save hook is firing. Also verify:

  • Check your browser’s Network tab to confirm the floating panel script is loading correctly
  • Try saving via the Classic Editor as a fallback โ€” if settings save there, the issue is specific to the Course Builder
  • If settings appear to save but don’t reload into the builder, confirm the Course Builder API response includes the trial fields
Section 16

Support

๐Ÿ’ฌ

Need help? Visit the support portal

If you’re experiencing an issue not covered in this documentation or the troubleshooting section, submit a support request through the portal. Please include the details below to help us resolve your issue as quickly as possible.

Open Support Portal โ†’
Plugin version (shown on the TFT License page)
Your WordPress and WooCommerce versions
Your Tutor LMS version (Free and Pro if applicable)
Relevant entries from wp-content/debug.log prefixed with [TFT]
A description of the expected behaviour and what actually happens