Skip to content

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.

  • 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.

Course Completion Rules first view

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.

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 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.

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.

  • 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_quiz course 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).

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.