LifterLMS Instructors: Adding Multiple Instructors to a Course
How to add several instructors to a LifterLMS course or membership, control who is shown on the page, what co-instructors can edit and see, how…
Read articleIf you need proof that students actually spent time on a lesson, or you want to stop people clicking Mark Complete ten seconds after the page loads, LifterLMS now has a built-in answer. Lesson time tracking arrived in LifterLMS 10.1 and is part of the free core plugin.
It does two jobs. It records how long each logged-in student spends on a lesson, and it can enforce a minimum time before the lesson can be completed. This guide is for course owners and training managers who want to switch it on, read the numbers correctly, and understand where the limits are before promising a regulator or a client anything.
Everything below was checked against the LifterLMS 10.3 source code, so the labels match what you will see in your dashboard.
When a student opens a tracked lesson, LifterLMS starts a time session for that student and lesson. A small script in the browser sends a heartbeat to the server every 30 seconds, and the server credits the time since the previous heartbeat. When the student leaves the page, a final request closes the session. Sessions add up across visits, so a student who spends six minutes today and four tomorrow has ten minutes on that lesson.
Two things make the numbers harder to inflate than a simple browser timer:
Time is only tracked for logged-in users. On a lesson marked as a free preview, time is tracked only for students enrolled in the course, and the minimum time setting is not available on free lessons at all, because visitors can open them without an account.
You can set the requirement in the lesson editor or in the course builder.
Open the lesson's settings panel in the builder and switch on Minimum Time on Lesson, then fill in the time fields. This is quicker when you are setting requirements across a whole course. For the rest of the builder, see our LifterLMS course builder guide.
Base the minimum on the content, not on a round number. A twelve-minute video with a short reading is a good candidate for ten minutes. Setting thirty minutes on a five-minute lesson teaches students to open the page and walk away, which defeats the point and fills your inbox with complaints.
On a lesson with a minimum time, a timer appears above the lesson content. By default it reads like 0:03:12 (Minimum required time: 0:10:00). Until the time is met:
When the requirement is met the buttons unlock without a page reload. The check is enforced on the server as well, so removing the disabled attribute in the browser does not let anyone complete the lesson early.
You can change the wording under LifterLMS > Settings > Courses, in the Lesson Time Tracking section. The Timer Display Format field accepts the placeholders {CURRENT_TIME} and {MINIMUM_TIME}, for example "Time on this lesson: {CURRENT_TIME} of {MINIMUM_TIME}".
If the student's login expires mid-lesson, the timer stops and asks them to log in again. Tell students this up front, especially on long lessons.
By default, only lessons with a minimum time are tracked. If you want time data for the whole course without forcing a minimum anywhere, go to LifterLMS > Settings > Courses and tick Track Time on All Lessons.
With this on, lessons without a minimum are tracked silently: no timer is shown and nothing is locked. It is the better choice when you want to learn how long lessons really take before you decide on minimums, or when a client wants a time-on-course figure without changing the learner experience.
The setting only affects time collected from that point on. Switching it on today does not create history for last month.
Time data appears in three places under LifterLMS > Reporting:
| Where | What you see |
|---|---|
| Courses > a course > Students | A Time in Course column with each student's total, which is also included when you export the table. |
| Students > a student > Courses > a course | A Total Course Time tile at the top of the student's course report. |
| The same screen, lesson table | A Time on Lesson column per lesson. Times below the lesson's minimum are shown in red. |
Times are shown as hours, minutes and seconds. Two labels need explaining to whoever reads the report:
The LifterLMS documentation for the course Students report describes the other columns. For using them day to day, see our guide to LifterLMS reporting and student progress.
Sometimes a student genuinely did the work and the clock disagrees: a lost connection, a long video watched in another app, a support case. An administrator can mark the lesson complete for the student from the reporting screens, and LifterLMS allows it even when the minimum has not been met.
It does not do this silently. The override is stored against the student and lesson with the admin's user ID, the trigger, the time actually recorded, the time required and the date, and the report shows (Overridden). If the lesson is later marked incomplete, the override record is cleared.
For a compliance programme you will often want overrides in your own audit log as well. LifterLMS fires the action llms_lesson_time_admin_override with all of those details, so a small snippet in a custom plugin can write them to a LifterLMS log file:
<?php
/**
* Plugin Name: LLMSX Time Override Log
*/
add_action( 'llms_lesson_time_admin_override', 'llmsx_log_time_override' );
function llmsx_log_time_override( $data ) {
$admin = get_userdata( $data['admin_id'] );
$message = sprintf(
'Override by %1$s (#%2$d): student #%3$d, lesson #%4$d, recorded %5$ds of %6$ds required, trigger %7$s.',
$admin ? $admin->user_login : 'unknown',
$data['admin_id'],
$data['student_id'],
$data['lesson_id'],
$data['actual_time'],
$data['required_time'],
$data['trigger']
);
llms_log( $message, 'time-overrides' );
}
The log appears under LifterLMS > Status > Logs. Put code like this in a small plugin rather than your theme, as described in how to customize LifterLMS without breaking updates.
Developers can also change the heartbeat interval with the llms_lesson_time_heartbeat_interval filter (default 30 seconds) and the maximum credit per heartbeat with llms_lesson_time_max_credit_per_heartbeat (default 300 seconds). Leave both alone unless you have measured a reason: a shorter interval means more requests to your server for every student on a lesson.
Many regulated programmes ask for a minimum number of hours: continuing education credits, mandatory workplace training, safety refreshers. Lesson time tracking is useful evidence for these, as long as you describe it accurately.
Check your accrediting body's rules before you rely on it. Some accept seat time recorded by the LMS. Others want a final assessment, a signed attestation or both. A practical pattern is a minimum time on each content lesson, a graded quiz at the end, and a certificate that is only awarded on passing.
admin-ajax.php requests stop time being credited. Test with a student account in a private window and watch the network panel.No. It is part of the free LifterLMS core plugin from version 10.1. Update LifterLMS if you do not see the settings.
No. Time keeps counting while the lesson page is open. Only one lesson can be tracked at a time, and the server never credits more time than has actually passed.
Not directly. The minimum is set per lesson. The course total is the sum of lesson times and appears as Time in Course in reporting.
Yes, on lessons with a minimum time the timer shows their accumulated time for that lesson. Course totals are only shown in the admin reports.
Turn on Track Time on All Lessons for a few weeks before you set any minimums. The real numbers will tell you which lessons are skimmed and what a fair minimum looks like. Then add minimums to the lessons that matter, and check the reports after the first cohort.
If you need more than the core feature offers, such as idle detection, video-watch tracking, time reports per cohort or an export your accrediting body will accept, that is custom work. Our LifterLMS customization team builds these on top of the core data. Tell us what your compliance rules require and we will tell you what is realistic.
How to add several instructors to a LifterLMS course or membership, control who is shown on the page, what co-instructors can edit and see, how…
Read article
What each LifterLMS user role can and cannot do, taken from the plugin’s own capability definitions, how to assign roles without over-granting…
Read article
How to build payment plans, subscriptions with a fixed number of payments, free and paid trials, and sale prices on LifterLMS access plans, with…
Read articleSkip the trial and error. Get specialist LifterLMS help and ship faster.