Title: Automatically mark lessons complete
Last modified: April 1, 2017

---

# Automatically mark lessons complete

 *  Resolved [wekhter](https://wordpress.org/support/users/wekhter/)
 * (@wekhter)
 * [9 years, 2 months ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/)
 * Is there any way to mark lessons complete automatically, bypassing the “mark 
   complete” button?
 * When I searched, I turned up the following thread: [https://wordpress.org/support/topic/marking-a-course-complete/](https://wordpress.org/support/topic/marking-a-course-complete/)
 * I saw reference there to a setting that allows you to automatically proceed to
   the next lesson when clicking the mark complete button, but when I looked in 
   the settings the closest thing I could find was a “Retake Lessons” option which
   is not the same thing at all. There was a script linked to programmatically mark
   lessons complete, but it doesn’t seem to be what I’m looking for.
 * Ideally, I’d just want to combine the “mark complete” button and “next lesson”
   button so that clicking “next” marks the current lesson complete.
 * Also, on the topic of the “Retake Lessons” button, would it be possible to get
   something similar to retake whole sections or whole courses?

Viewing 12 replies - 1 through 12 (of 12 total)

 *  [Thomas Patrick Levy](https://wordpress.org/support/users/thomasplevy/)
 * (@thomasplevy)
 * [9 years, 2 months ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-8988726)
 * [@wekhter](https://wordpress.org/support/users/wekhter/),
 * That thread is pretty old
 * In 3.0 we removed the option for automatic advancing and now lessons automatically
   advance when clicking “mark as complete”
 * We don’t have a setting for removing the mark complete button. It gets pretty
   complicated pretty quick but a lot of things in LifterLMS rely on things being
   recorded as being completed. If you take that functionality away you’re creating
   a lot more issues than your solving.
 * On the roadmap is auto-completion of audio and video lessons where we can record
   based on media progress. But that’s a lower priority so it’s a bit off yet.
 * You can programmatically complete (and uncomplete) things now:
 * [llms_mark_complete()](https://github.com/gocodebox/lifterlms/blob/master/includes/functions/llms.functions.person.php#L163-L179)
   and [llms_mark_incomplete()](https://github.com/gocodebox/lifterlms/blob/master/includes/functions/llms.functions.person.php#L181-L197)
 * Retaking a whole course or section is a great idea. Please submit it as a feature
   request at [https://lifterlms.com/contact](https://lifterlms.com/contact)!
 * Thanks,
 *  [jstead](https://wordpress.org/support/users/jstead/)
 * (@jstead)
 * [9 years, 2 months ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-8988941)
 * I did something that might help. We only wanted to one button at the bottom to
   avoid confusion, so made the “next lesson” button trigger the mark complete button
   via jquery and hide it via css.
 * The issue to work around though is that IF the lesson is complete, the mark complete
   button doesn’t exist so you need to test for it first.
 *     ```
       // test if lesson is already complete by checking if the mark_complete div exists
       var lessonCompleted = false;
           if($('#llms_mark_complete').length == 0){
           lessonCompleted = true;
       };
   
       // if the lesson in NOT complete this will trigger the mark complete button. If lesson IS complete the next lesson button will function as normal.	
       $('.llms-next-lesson').click(function(e) {	
           if(lessonCompleted == false){
               e.preventDefault();
       	$('#llms_mark_complete').trigger("click");
           }
       });
       ```
   
 * Technically the above could be triggered from other events but would then need
   an else statement triggering the ‘next lesson’ button.
 *  Thread Starter [wekhter](https://wordpress.org/support/users/wekhter/)
 * (@wekhter)
 * [9 years, 2 months ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-8989054)
 * [@thomasplevy](https://wordpress.org/support/users/thomasplevy/) Thanks! I guess
   I got distracted by the completion message and didn’t realize that it was already
   automatically completing. 🙂 What I was asking wasn’t to get rid of the button
   and functionality, but if there was a way to merge it with the next button–so
   that if you click for the next lesson, it’s the same as clicking mark complete.
 * About the incomplete thing–I sent in a feature request, as recommended.
 * I have another question. Is it possible to customize ths slugs for the custom
   post types LifterLMS adds? For instance, instead of /course/name/ have it be /
   program/name/ or instead of /lesson/name/ be /module/name/ etc?
 *  [Thomas Patrick Levy](https://wordpress.org/support/users/thomasplevy/)
 * (@thomasplevy)
 * [9 years, 2 months ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-8993429)
 * [@wekhter](https://wordpress.org/support/users/wekhter/),
 * Sure, I have an example of how to do this for a lesson here: [https://gist.github.com/thomasplevy/aa719323d8761587f3b4c6714274e0bf](https://gist.github.com/thomasplevy/aa719323d8761587f3b4c6714274e0bf)
 * You can replace the filter on line 20 with the course-equivalent: lifterlms_register_post_type_course
 * After adding these codes to your theme/plugin you’ll want to make sure you flush
   your rewrite rules (you’ll end up with 404s on existing content if you dont!)
 * How to flush: [https://lifterlms.com/docs/how-to-flush-wordpress-rewrite-rules-or-permalinks/](https://lifterlms.com/docs/how-to-flush-wordpress-rewrite-rules-or-permalinks/)
 * Hope that helps,
 *  Thread Starter [wekhter](https://wordpress.org/support/users/wekhter/)
 * (@wekhter)
 * [9 years, 2 months ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-8999014)
 * [@jstead](https://wordpress.org/support/users/jstead/) Oops, you posted that 
   while I was writing my previous reply, so I didn’t see it before! I’m not really
   too familiar w/ jquery, where did you put this? Also, did you have anything in
   place for incomplete buttons?
 * [@thomasplevy](https://wordpress.org/support/users/thomasplevy/) Thanks! I’m 
   going to test that out. Is there a filter for `lifterlms_register_post_type_course`?
 * Also, I’ve been testing out LifterLMS on a local site that has WooCommerce installed
   and I noticed that when testing out updating account fields through the WooCommerce
   account page, it redirected to the LifterLMS account page (with a LifterLMS notification).
   Do I need the WooCommerce compatibility extension to prevent this? Or is there
   a way to just prevent this w/ a snippet?
 *  [jstead](https://wordpress.org/support/users/jstead/)
 * (@jstead)
 * [9 years, 2 months ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-8999170)
 * In all my projects I add a custom Javascript file for custom code editions like
   this.
 * Add the following code to your function.php to load a custom javascript file 
   from the following location [yourTheme-child]/js/custom-scripts.js
 *     ```
       // Load Custom JavaScript file
       function mytheme_custom_scripts() {
       	if ( ! is_admin() ) {
       		wp_enqueue_script('jquery');
       		$scriptsrc = get_stylesheet_directory_uri() . '/js/';
       		wp_register_script( 'myhandle', $scriptsrc . 'custom-scripts.js', 'jquery', '1.0',  TRUE );
       		wp_enqueue_script( 'myhandle' );
       	}
       }
       add_action( 'wp_enqueue_scripts', 'mytheme_custom_scripts' );
       ```
   
 * Then within that JavaScript file add the previously mentioned snippet within 
   a JQuery document ready function.
 *     ```
       jQuery(document).ready(function($) {	
       	var lessonCompleted = false;
       	if($('#llms_mark_complete').length == 0){
       		lessonCompleted = true;
       	};
   
       	$('.llms-next-lesson').click(function(e) {	
       		if(lessonCompleted == false){
       			e.preventDefault();
       			$('#llms_mark_complete').trigger("click");
       		} 
       	});
       }
       ```
   
 * I made this prior to the incomplete button being added, so not sure how it works…
   but from what I can gather, you wouldn’t want the incomplete button to have the
   functionality this gives (combining with the “next-lesson” button)
 *  [sdwarwick](https://wordpress.org/support/users/sdwarwick/)
 * (@sdwarwick)
 * [9 years, 2 months ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-9003958)
 * so, I have been using something very similar to these concepts for a while now.
   essentially hid the “mark complete” button and fired the mark_complete form using
   a jquery “click”
 * this does two things nicely – registers completion and serves the “next” lesson.
 * EXCEPT!! the last lesson in the course gets stuck. rather than a default for 
   end-of-course, you just send back the same url. Of course, the second time, the
   mark complete button is removed since now it is considered a “completed” lesson.
   but still, users see the last lesson twice, which is a real bummer when it is
   a final exam!!
 * you have a very simple opportunity to add a hook in the following code for get
   next lesson… I am at a loss right now how to deal with this other than literally
   removing the mark_complete action from init and adding a custom version that 
   provides an end-of-course option. the approach would be to detect a null on next
   lesson and provide an alternative
 *     ```
       	public function get_next_lesson() {
   
       		$parent_section = $this->get_parent_section();
       		$current_position = $this->get_order();
       		$next_position = $current_position + 1;
   
       		$args = array(
       			'posts_per_page' 	=> 1,
       			'post_type' 		=> 'lesson',
       			'nopaging' 			=> true,
       			'post_status'   	=> 'publish',
       			'meta_query' 		=> array(
       				'relation' => 'AND',
       				array(
       				    'key' => '_llms_parent_section',
       				    'value' => $parent_section,
       				    'compare' => '=',
       			    ),
       			    array(
       				    'key' => '_llms_order',
       				    'value' => $next_position,
       				    'compare' => '=',
       			    )
       			),
       		);
       		$lessons = get_posts( $args );
   
       		//return the first one even if there for some crazy reason were more than one.
       		if ( $lessons ) {
       			return $lessons[0]->ID;
       		} else {
       			// See if there is another section after this section and get first lesson there
       			$parent_course = $this->get_parent_course();
       			$cursection = new LLMS_Section( $this->get_parent_section() );
       			$current_position = $cursection->get_order();
       			$next_position = $current_position + 1;
   
       			$args = array(
       				'post_type' 		=> 'section',
       				'posts_per_page'	=> 500,
       				'meta_key'			=> '_llms_order',
       				'order'				=> 'ASC',
       				'orderby'			=> 'meta_value_num',
       				'meta_query' 		=> array(
       					'relation' => 'AND',
       					array(
       					    'key' => '_llms_parent_course',
       					    'value' => $parent_course,
       					    'compare' => '=',
       				    ),
       				    array(
       					    'key' => '_llms_order',
       					    'value' => $next_position,
       					    'compare' => '=',
       				    )
       				),
       			);
       			$sections = get_posts( $args );
   
       			if ( $sections ) {
       				$newsection = new LLMS_Section( $sections[0]->ID );
       				$lessons = $newsection->get_children_lessons();
       				if ( $lessons ) {
       					return $lessons[0]->ID;
       				} else {
       					return false;
       				}
       			} else {
       		return false;   // no! no! no!!   
       			}
       		}
       	}
       ```
   
    -  This reply was modified 9 years, 2 months ago by [sdwarwick](https://wordpress.org/support/users/sdwarwick/).
 *  [Thomas Patrick Levy](https://wordpress.org/support/users/thomasplevy/)
 * (@thomasplevy)
 * [9 years, 2 months ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-9016683)
 * [@wekhter](https://wordpress.org/support/users/wekhter/),
 * Sure, it’s exactly what you said `lifterlms_register_post_type_course` and it
   works the same as lesson!
 * > Also, I’ve been testing out LifterLMS on a local site that has WooCommerce 
   > installed and I noticed that when testing out updating account fields through
   > the WooCommerce account page, it redirected to the LifterLMS account page (
   > with a LifterLMS notification). Do I need the WooCommerce compatibility extension
   > to prevent this? Or is there a way to just prevent this w/ a snippet?
 * I’m sorry about this. I think this is an unintended event. I will take a closer
   look at this and see if we can fix this in the WordPress core.
 * I’ve filed a potential bug in GitHub so I don’t lose track of it: [https://github.com/gocodebox/lifterlms/issues/309](https://github.com/gocodebox/lifterlms/issues/309)
 *  [Thomas Patrick Levy](https://wordpress.org/support/users/thomasplevy/)
 * (@thomasplevy)
 * [9 years, 2 months ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-9016686)
 * [@sdwarwick](https://wordpress.org/support/users/sdwarwick/),
 * There’s always room for more hooks actions and filters.
 * Please understand that I am a single human being that does my very best to anticipate
   the needs of all our users and developers.
 * I’ve missed something obviously. Can you hook me up with a pull request for the
   hook you need: [https://github.com/gocodebox/lifterlms#contributing](https://github.com/gocodebox/lifterlms#contributing)
 * Thanks!
 *  [sdwarwick](https://wordpress.org/support/users/sdwarwick/)
 * (@sdwarwick)
 * [9 years, 2 months ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-9016710)
 * [@thomasplevy](https://wordpress.org/support/users/thomasplevy/) – I’m always
   grateful for the work you do to make lifter a great product. I see providing 
   specific opportunities for improvement as the most effective way to support those
   efforts!
 * I’ll look at a developing a pull request.
 *  Thread Starter [wekhter](https://wordpress.org/support/users/wekhter/)
 * (@wekhter)
 * [9 years, 2 months ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-9017089)
 * [@jstead](https://wordpress.org/support/users/jstead/) I tried the code you posted
   but nothing happened when clicking the next button–is there any step you skipped?
   I’m not too familiar with jquery, so I’m not sure what’s not working.
 * [@thomasplevy](https://wordpress.org/support/users/thomasplevy/) Do you need 
   any info to replicate the behavior?
 * [@sdwarwick](https://wordpress.org/support/users/sdwarwick/) I hope your pull
   request is successful 🙂
 *  [Thomas Patrick Levy](https://wordpress.org/support/users/thomasplevy/)
 * (@thomasplevy)
 * [9 years, 1 month ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-9032134)
 * [@wekhter](https://wordpress.org/support/users/wekhter/),
 * No thank you, will be working on it later today and let you know once I get it
   resolved. Sorry for the delay it’s been a hectic week…

Viewing 12 replies - 1 through 12 (of 12 total)

The topic ‘Automatically mark lessons complete’ is closed to new replies.

 * ![](https://ps.w.org/lifterlms/assets/icon.svg?rev=2034507)
 * [LifterLMS - WP LMS for eLearning, Online Courses, & Quizzes](https://wordpress.org/plugins/lifterlms/)
 * [Frequently Asked Questions](https://wordpress.org/plugins/lifterlms/#faq)
 * [Support Threads](https://wordpress.org/support/plugin/lifterlms/)
 * [Active Topics](https://wordpress.org/support/plugin/lifterlms/active/)
 * [Unresolved Topics](https://wordpress.org/support/plugin/lifterlms/unresolved/)
 * [Reviews](https://wordpress.org/support/plugin/lifterlms/reviews/)

 * 12 replies
 * 4 participants
 * Last reply from: [Thomas Patrick Levy](https://wordpress.org/support/users/thomasplevy/)
 * Last activity: [9 years, 1 month ago](https://wordpress.org/support/topic/automatically-mark-lessons-complete/#post-9032134)
 * Status: resolved