Course Completion Rules
Learnomy overviewFree + ProGet Learnomy →
A course’s completion rule decides when a student counts as finished – the moment their enrollment flips to completed, progress hits 100%, and any certificate is awarded. You choose one rule per course from four options.
What you can do
Section titled “What you can do”- Complete a course when the student finishes every lesson.
- Complete a course only when every lesson is done AND the student passes the course’s quiz.
- Complete a course when the student finishes a set percentage of the content, so a long course can finish before the very last lesson.
- Keep completion manual, so an admin or instructor marks each student complete by hand and the course never auto-completes.

How to use it
Section titled “How to use it”Step 1 – open the Completion & Certificate section
Section titled “Step 1 – open the Completion & Certificate section”Edit the course and open the Completion & Certificate section of the course editor.
Step 2 – choose a Completion Requirement
Section titled “Step 2 – choose a Completion Requirement”The Completion Requirement dropdown offers four rules:
- All Lessons Completed – the enrollment completes when every lesson in the course is marked complete (progress reaches 100%). A quiz in the course stays optional under this rule; the editor says so under the dropdown and names the rule to pick if a quiz has to be passed first. A course that has no lessons at all, only a quiz, completes when that quiz is passed.
- Lessons + Final Quiz – every lesson must be complete AND the student must have at least one passing attempt on a quiz scoped to the course (or one of its lessons). Practice and survey quizzes do not gate completion.
- Percentage of Content – the enrollment completes when the student’s progress reaches the percentage you set (see step 3). Useful when the last few lessons are optional.
- Manual Completion – the course never auto-completes. Only an admin or instructor marks a student complete. A student who has finished every lesson sees a note that their instructor still has to mark the course complete (see below).
Step 3 – set the percentage (percentage rule only)
Section titled “Step 3 – set the percentage (percentage rule only)”When you pick Percentage of Content, a Completion Percentage slider appears. Set the minimum share of lessons a student must finish (1-100). At that threshold the course completes; it does not wait for the last lesson.
Step 4 – save
Section titled “Step 4 – save”Save the course. From then on, whenever a student finishes a lesson or submits a quiz, Learnomy re-checks the rule and completes the enrollment the moment it is satisfied. Completion fires whether the last action was a lesson finish or a quiz pass – both paths converge on the same check.
What the student sees when the course completes
Section titled “What the student sees when the course completes”The step that completes the course – a lesson, a sub-lesson or a quiz pass – sends the student to the Course complete screen at /courses/{course-slug}/complete/. Every ending lands on the same screen. It shows:
- the course name and a short well-done line;
- View your certificate, when a certificate was issued;
- Leave a review, when reviews are on and the student has not reviewed the course yet;
- any step still open, for example “One Quiz is still open if you want to take it” on a course whose rule left a quiz optional;
- Back to Course.
Afterwards the course page button reads Course complete and the last step’s Finished link both lead back to this screen. Only a student who has really completed the course can open it; anyone else is sent to the course page.
A lesson with sub-lessons
Section titled “A lesson with sub-lessons”A lesson that has sub-lessons counts as finished when the lesson and every published sub-lesson under it are done. Until then the course percentage, the section counter (for example 0/1) and the certificate all wait. Finishing only the sub-lesson does not complete the lesson either.
Manual Completion: the waiting state
Section titled “Manual Completion: the waiting state”On a Manual course a student can reach 100% without being complete. Until an admin or instructor marks them complete:
- the course page shows the progress block and one note, “You have finished all the lessons. Your instructor marks this course complete; you will hear from us when they do.”, with no congratulations banner and no certificate button;
- the My Courses card reads Waiting for your instructor instead of Review;
- the last lesson reads Waiting for your instructor with a link back to the course.
No certificate is issued and the Course complete screen stays closed until the instructor confirms.
Settings and options
Section titled “Settings and options”- Where completion is re-checked. Completion is evaluated on two events: a lesson being marked complete, and a quiz being submitted. Either can be the one that finishes the course, so a
lessons_and_quizcourse that had all lessons done completes the instant the quiz is passed. - Manual never auto-completes. With the manual rule, the auto-completion path is skipped entirely; nobody is completed until an admin or instructor does it.
- Certificates ride on completion. If the course awards a certificate, it is issued when the completion rule is met – so the rule you pick also controls when the certificate lands. A student holds one active certificate per course: a second request made at the same moment returns the first certificate instead of issuing another. Opening the course page never issues a certificate on its own; a bare 100% on a Manual course is not completion.
- Per-lesson enforcement is separate. The Completion Requirement decides when the whole course finishes. How strictly each individual lesson’s watch-time / video-percent / scroll / quiz-pass rules are enforced is a separate control (Per-Lesson Rule Enforcement: inherit / strict / advisory / off).
For developers
Section titled “For developers”Service (Learnomy\Services\Progress_Service):
mark_lesson_complete( $user_id, $lesson_id, $bypass_rules, $time_spent_seconds, $client_signals )– marks a lesson complete, rolls up course progress, and completes the enrollment when the rule is satisfied.maybe_complete_course( $user_id, $course_id )– idempotent re-check called from both the lesson-complete and quiz-submit paths; returns true when the call resulted in completion.calculate_course_progress( $user_id, $course_id )– the 0-100 progress figure the rules read.
The lrn_courses.completion_type column holds one of all_lessons, lessons_and_quiz, percentage, manual; completion_value holds the percentage threshold (1-100) for the percentage rule.
Hooks: learnomy_lesson_completed (fires per lesson), learnomy_course_completed (fires once, when an enrollment completes), and the filter learnomy_course_complete_url (args: $url, $course) to send students somewhere else when a course completes. The lesson, sub-lesson and quiz-submit REST responses carry course_complete_url on the request that completes the course and on no other. The screen’s template is course-complete.php, overridable like any other (see Template Overrides). Progress_Service::completed_lesson_count( $course_id, $progress_rows ) is the one counter behind the percentage: top-level lessons, each finished only with its sub-lessons. REST: POST /learnomy/v1/progress/sync posts { item_type: 'lesson', item_id, status: 'completed' } and runs the same completion logic.

