Sensei LMS 3.0
Sensei LMS 3.0 is now available for testing. This is a major release that introduces the concept of course enrollments. Previously, a learner had access to a course if they had progress in that course (i.e. they were listed in Learner Management). As of Sensei LMS 3.0, a learner has access to a course if they are enrolled in that course.
Separating course progress from course enrollment means that removing a learner from a course will still retain their progress. This means that the learner will be able to pick up where they left off should they enroll in the course again later:

A learner is automatically (manually) enrolled when they click the Take this Course button on the course page. Administrators and teachers can also enroll learners by clicking the Manually enroll learner button in Learner Management. Similarly, learners can be unenrolled by clicking the Remove manual enrollment button. Only courses that a learner is enrolled in will be displayed on their My Courses page.
Here are some of the other enhancements and fixes you’ll find in 3.0:
- Module content is only displayed if the learner is enrolled in the course.
- Improved support for the Twenty Twenty theme.
- Added support for bulk editing lessons.
- Teachers are now able to reset progress and edit the course start date of a learner.
- Fixed video playback for question media attachments.
- Fixed the ability to add multiple learners to a course.
See what else is in this release.
Testing Sensei LMS
You can download the Sensei LMS 3.0 beta here. One of the most important things to test in this release is that course access for learners is preserved; that is, ensuring that the same learners who had access to the course prior to updating to Sensei LMS 3.0 still have access to the course after updating to Sensei LMS 3.0.
If you find a bug, please submit an issue on Github or leave a comment here. Our tentative release date is April 15th. UPDATE: The release date has been pushed back to April 22nd April 27th, 2020.
WooCommerce Paid Courses 2.0
WooCommerce Paid Courses 2.0 has been updated to support enrollments. The rules for determining when a learner is enrolled have been simplified and are as follows:
- When selling a course using a simple or variable product, a learner will be enrolled if the status of their order is Processing or Completed. If the order status is changed to something else, or the order is moved to the trash, they will be unenrolled.
- WooCommerce Subscriptions: When selling a course using a simple or variable subscription, a learner will be enrolled if the status of their subscription is Active or Pending Cancellation. If the subscription status is changed to something else, or the subscription is moved to the trash, they will be unenrolled. The status of the order associated with the subscription is not used to determine enrollment.
- WooCommerce Memberships: When using a membership to grant access to a course, a learner will be enrolled if the status of their membership is Active, Free Trial (only applicable when using subscriptions), Complimentary or Pending Cancellation (only applicable when using subscriptions). If the membership status is changed to something else, or the membership is moved to the trash, they will be unenrolled. Neither the status of the order nor the status of the subscription (if applicable) associated with the membership are used to determine enrollment.
Here are some of the other enhancements and fixes you’ll find in 2.0:
- A confirmation modal will be displayed when the products attached to a course are updated. Altering any existing products may update the enrolment status of learners based on whether or not they have purchased that product. Once this modal is confirmed, it will not be displayed again for at least 1 week.
- Added support for searching and selecting from a large number of products when attaching a product to a course.
- The
woocommerce
CSS class is now only added to the single course page.
Testing WooCommerce Paid Courses
Beta testers will receive the WooCommerce Paid Courses beta directly to their inbox. If you would like to sign up to be a beta tester and have a valid license for WooCommerce Paid Courses that has not expired, please fill out the beta tester signup form using the same email address you used to purchase your license.
Just as with Sensei LMS, the most important thing to test in this release is that course access for learners is preserved. This is applicable for all types of courses including free, paid, and courses sold as part of a subscription or membership.
If you find a bug, please leave a comment here. Our tentative release date is April 15th. UPDATE: The release date has been pushed back to April 22nd April 27th, 2020.
For Developers
If you’re a developer, here are the technical details of what’s changed in Sensei LMS 3.0 and WooCommerce Paid Courses 2.0.
Sensei LMS 3.0
Template File Changes
archive-course.php
– Added container around controls and header.course-results.php
– ReplacedSensei_Utils::user_started_course
withSensei_Course::is_user_enrolled
.single-course/modules.php
– ReplacedSensei_Utils::user_started_course
withSensei_Course::is_user_enrolled
.
New Filters
sensei_background_job_actions
– Get a list of background job actions that are handled by the class.sensei_can_access_course_content
– Whether or not the user can view course content.sensei_can_user_manually_enrol
– Checks if the currently logged in user can manually enroll in a given course.sensei_can_user_view_module
– Whether or not the user can view module content.sensei_course_archive_page_url
– Filter the course archive page URL.sensei_course_enrolment_providers
– Get all registered course enrolment providers.sensei_is_legacy_enrolled
– Whether or not a user was enrolled in a course prior to Sensei LMS 3.0.0.sensei_legacy_enrolment_check
– Whether or not to use the legacy enrolment check. Legacy check uses course progress to determine enrolment.sensei_module_course_signup_notice_level
– Customize the alert level for the course sign-up notice message on the module page.sensei_module_course_signup_notice_message
– Customize the course sign-up notice message on the module page.sensei_module_show_course_signup_notice
– Whether or not to show the course sign-up notice on the module page.sensei_scheduler_class
– Override the default class that implementsSensei_Scheduler_Interface
.sensei_should_defer_enrolment_check
– Whether to defer the enrolment check to the end of the request.sensei_user_all_access
– Whether or not a particular user has access to all of Sensei LMS without restriction.
New Actions
sensei_before_learners_enrolled_courses_query
– Fires before querying the courses a learner is enrolled in.sensei_enrolment_results_calculated
– Notify upon calculation of enrolment results.
Deprecated Functions & Methods
quiz_questions
– UseSensei_Templates::get_template
sensei_check_prerequisite_course
– UseSensei_Course::is_prerequisite_complete
Sensei_Admin::delete_user_activity
– UseSensei_Learner::delete_all_user_activity
Sensei_Course::course_query
Sensei_Course::filter_my_courses
Sensei_Course::get_archive_query_args
Sensei_Frontend::sensei_course_image
– UseSensei()->course->course_image
Sensei_Frontend::sensei_get_template_part
– UseSensei_Templates::get_part
Sensei_Frontend::sensei_lesson_image
– UseSensei()->lesson->lesson_image
Sensei_Frontend::sensei_lesson_quiz_meta
– UseSensei_Lesson::footer_quiz_call_to_action
Sensei_Learner::get_all
Sensei_Learner::get_all_active_learner_ids_for_course
Sensei_Learner_Management::get_learner_full_name
– UseSensei_Learner::get_full_name
instead.Sensei_Learner_Management::load_data_object
– Usenew Sensei_Learners_$name
Sensei_Learners_Admin_Bulk_Actions_Controller::get_query_args
Sensei_Learners_Admin_Bulk_Actions_Controller::learners_admin_menu
Sensei_Learners_Main::data_table_footer
Sensei_Lesson::user_not_taking_course_message
Sensei_Main::run_updates
Sensei_Utils::delete_all_user_activity
– UseSensei_Learner::delete_all_user_activity
Sensei_Utils::sensei_get_user_question_answer_notes
– UseSensei()->quiz->get_user_question_feedback
Sensei_Utils::sensei_grade_question_auto
– UseSensei_Grading::grade_question_auto
Sensei_Utils::sensei_grade_quiz_auto
– UseSensei_Grading::grade_quiz_auto
Sensei_Utils::sensei_save_quiz_answers
– UseSensei_Quiz::save_user_answers
Sensei_Utils::user_started_course
– To check if a learner is enrolled, useSensei_Course::is_user_enrolled
. To check if a learner has course progress, useSensei_Utils::has_started_course
.
Deprecated Filters
sensei_all_access
– Usesensei_user_all_access
sensei_couse_access_permission_message
sensei_display_start_course_form
– Usesensei_can_user_manually_enrol
sensei_is_course_content_restricted
sensei_learners_learners_columns
– Usesensei_learners_default_columns
sensei_learners_learners_columns_sortable
– Usesensei_learners_default_columns_sortable
sensei_user_can_register_for_course
WooCommerce Paid Courses 2.0
New Filters
sensei_wc_paid_courses_course_block_editor_l10n_data
– Filter localization data for the block editor script.sensei_wc_paid_courses_memberships_auto_enrol_courses
– Whether or not to automatically enrol users in courses that are part of this membership.sensei_wc_paid_courses_memberships_is_signed_up
– Check if a user should be initially signed up for a course.sensei_wc_paid_courses_subscriptions_get_active_subscription_statuses
– Get the active subscription statuses.sensei_wc_paid_courses_subscriptions_get_subscription_types
– Get the subscription types for products.
New Actions
sensei_wc_paid_courses_course_product_added
– Fires after adding a product to a course.sensei_wc_paid_courses_course_product_removed
– Fires after removing a product from a course.sensei_wc_paid_courses_course_product_toggled
– Fires after making any change to the products attached to a course.
Deprecated Classes
Sensei_WC_Paid_Courses\Frontend\Quizzes
Sensei_WC_Subscriptions
Deprecated Functions & Methods
Sensei_WC::activate_subscription
Sensei_WC::alter_can_user_view_lesson
Sensei_WC::cancel_order
Sensei_WC::complete_order
Sensei_WC::course_update
Sensei_WC::get_learner_course_active_order_id
Sensei_WC::is_my_courses_page
Sensei_WC::is_wc_subscriptions_active
Sensei_WC_Memberships::add_wc_memberships_notice
Sensei_WC_Memberships::display_start_course_form_to_members_only
Sensei_WC_Memberships::is_course_access_restricted
Sensei_WC_Memberships::is_my_courses_page
Sensei_WC_Memberships::on_wc_memberships_user_membership_saved
Sensei_WC_Memberships::start_courses_associated_with_membership
Sensei_WC_Paid_Courses\Courses::activate_purchased_courses
Sensei_WC_Paid_Courses\Courses::activate_purchased_courses_my_courses_page
Sensei_WC_Paid_Courses\Courses::activate_purchased_single_course
Sensei_WC_Paid_Courses\Courses::remove_active_course
Sensei_WC_Paid_Courses\Frontend\Courses::should_filter_subscription_course
Sensei_WC_Paid_Courses\Frontend\Lessons::course_signup_notice_message
Sensei_WC_Paid_Courses\Frontend\Lessons::do_show_course_signup_notice
Sensei_WC_Paid_Courses\Frontend\Quizzes::course_signup_notice_message
Sensei_WC_Paid_Courses\Frontend\Quizzes::init
Sensei_WC_Subscriptions::activate_subscription
Sensei_WC_Subscriptions::get_subscription_permission
Sensei_WC_Subscriptions::get_subscription_types
– UseSensei_WC_Paid_Courses\Course_Enrolment_Providers\WooCommerce_Subscriptions::get_subscription_types
Sensei_WC_Subscriptions::get_subscription_user_started_course
Sensei_WC_Subscriptions::has_user_bought_subscription_but_cancelled
Sensei_WC_Subscriptions::is_user_eligible_for_access
Sensei_WC_Subscriptions::is_wc_subscriptions_active
– UseSensei_WC_Paid_Courses\Course_Enrolment_Providers\WooCommerce_Subscriptions::is_active
Sensei_WC_Subscriptions::load_wc_subscriptions_integration_hooks
Sensei_WC_Subscriptions::user_has_non_subscription_product_for_course
Sensei_WC_Subscriptions::was_user_added_without_subscription
Deprecated Filters
sensei_wc_paid_courses_memberships_auto_start_course
sensei_wc_paid_courses_memberships_auto_start_courses
– Usesensei_wc_paid_courses_memberships_auto_enrol_courses
As these are beta releases, please test them on a staging site and not your live site. If you don’t have a staging site, you can use the WP Staging plugin to create one.
Thank you to all our testers and contributors!