LifterLMS REST API Version 1.0.0-beta.23

Updates and Enhancements
  • Replaced call to deprecated LLMS_Section::get_parent_course() with LLMS_Section::get( 'parent_course' ).
  • Replaced the calls to the deprecated LLMS_Lesson::get_parent_course() method with LLMS_Lesson::get( 'parent_course' ).
  • Replaced deprecated llms_user_removed_from_membership_level action hook with llms_user_removed_from_membership.

LifterLMS Version 6.0.0-beta.2

New Features
  • Added a link to return to the student dashboard when viewing an awarded certificate. #1959
  • The block editor is now enabled by default for certificates when using WordPress versions 5.8 and later.
  • Existing certificates are marked as “legacy” and will continue to use the classic editor until migrated.
  • To migrate a certificate, click the “Migrate Certificate” button. This will force the certificate’s content into blocks.
  • A number of new settings are available to certificates when using the block editor:
  • Set the certificate’s display (and print) size using common paper sizes such as US Letter, US Legal, A3, A4, and more.
  • Set the certificate’s display orientation: portrait of landscape.
  • Set the certificate’s inner margins.
  • Set the certificate’s background color.
  • A new block, the Certificate Title Block, has been made available to certificates.
  • The block works like a WordPress core Heading Block with added options for selecting from a few display fonts (provided by Google Web Fonts).
  • The block controls the title of awarded certificates.
  • + Added the ability to sync awarded certificates with the template used to generate them. #1078
  • The post_name of earned certificate posts will be generated with a randomized 3+ character string in favor of relying on sequential numbers.
  • Added the ability for administrators and LMS managers to edit earned certificates/achievements from the students reporting screen, as well as award new certificates/achievements to students.
  • + Added certificate global options for the default size of new certificates and certificate templates.
  • Certificate and email template merge code buttons now include [llms-user] information shortcodes.
  • Added certificate sequential ID functionality merge code. Read more.
Updates and Enhancements
  • Added pagination to achievement and certificate reporting pages.
  • Certificates no longer use the header.php and footer.php files from the site’s theme, instead custom templates (templates/certificates/header.php and templates/certificates/footer.php) are used instead. These templates are minimal and exclude theme wrappers which reduces the visual conflicts encountered from theme wrappers, backgrounds, and more, especially when printing certificates. #463
  • The achivements and certificates dashboard endpoints are now paginated. #669
  • Added new default images for use with achievements and certificates.
  • The site-wide default images can be customized on the admin panel under Settings -> Engagements.
  • The old default images can be used by filtering llms_use_legacy_engagement_images. #1081
  • The URL of earned user certificates has been changed from “my_certificate” to “certificate”. Requests to the old url are automatically redirected to the new url, including instances where the URL slug has been translated.
  • The URL of certificate temaplate previews has been changed from “certificate” to “certificate-template”.
  • The certificate merge code, {first_name}, now outputs an empty string in favor of falling back to the user’s nickname when there is no first name for the user. #1640
  • Updates LifterLMS REST to v1.0.0-beta.22.
  • The look and behavior of the certificate {{MINI_CERTIFICATE}} pop-over notification merge code now displays a placeholder preview of the certificate in favor of attempting to render a tiny version of the actual certificate. #1950
Bug Fixes
  • + Fixed how the protected LLMS_Notifications_Query::$found_results property is accessed in LLMS_Abstract_Notification_Controller::has_subscriber_received(). + Fixed how the protected LLMS_Notifications_Query::$max_pages property is accessed in lifterlms_template_student_dashboard_my_notifications().
  • Delayed engagements are automatically unscheduled when the related post is deleted.
  • Prior to sending a delayed engagement the recipient’s enrollment in the related post is verified resulting the engagement not being triggered if the recipient’s enrollment has been terminated. #290
  • A disabled student dashboard endpoint will no longer display the endpoint’s summary on the main dashboard page. #535
  • Post search filter boxes on various post tables will now longer display a link to the selected post.
  • Basic notification code is no longer loaded on the admin panel.
Deprecations
  • Public access to properties of the abstract LLMS_Database_Query has been deprecated.
  • Public access to class property LLMS_Database_Query::$found_results. The property is no longer publicly writable but can be read via LLMS_Database_Query::get_found_results().
  • Public access to class property LLMS_Database_Query::$max_pages. The property is no longer publicly writable but can be read via LLMS_Database_Query::get_max_pages().
  • Public access to class property LLMS_Database_Query::$number_results. The property is no longer publicly writable but can be read via LLMS_Database_Query::get_number_results().
  • Public access to class property LLMS_Database_Query::$results. The property is no longer publicly writable but can be read via LLMS_Database_Query::get_results().
  • Public access to class property LLMS_Database_Query::$query_vars. The variable as a whole cannot be publicly accessed, instead use LLMS_Database_Query::get() and LLMS_Database_Query::set() to read and write to the array.
  • The above changes were made to the abstract class LLMS_Database_Query but the following concrete classes that utilize the abstract are also affected by this change: LLMS_Query_User_Postmeta, LLMS_Student_Query, LLMS_Query_Quiz_Attempt, LLMS_Events_Query, and LLMS_Notifications_Query.
  • Class LLMS_Achievement_User is deprecated with no direct replacement.
  • Method LLMS_Achievement::is_enabled() is deprecated with no replacement.
  • Method LLMS_Achievement::get_blogname() is deprecated with no replacement.
  • Method LLMS_Achievement::format_string() is deprecated with no replacement.
  • Method LLMS_Achievement::get_title() is deprecated with no replacement.
  • Method LLMS_Achievement::get_content() is deprecated with no replacement.
  • Method LLMS_Achievement::get_content_html() is deprecated with no replacement.
  • Method LLMS_Achievement::create() is deprecated with no replacement.
  • Method LLMS_Achievements::trigger_engagement() is deprecated in favor of LLMS_Engagement_Handler::handle_achievement().
  • Class LLMS_Certificate is deprecated with no direct replacement.
  • Method LLMS_Certificate::is_enabled() is deprecated with no replacement.
  • Method LLMS_Certificate::get_blogname() is deprecated with no replacement.
  • Method LLMS_Certificate::format_string() is deprecated with no replacement.
  • Method LLMS_Certificate::get_title() is deprecated with no replacement.
  • Method LLMS_Certificate::get_content() is deprecated with no replacement.
  • Method LLMS_Certificate::get_content_html() is deprecated with no replacement.
  • Method LLMS_Certificate::get_title() is deprecated with no replacement.
  • Method LLMS_Certificates::trigger_engagement() is deprecated in favor of LLMS_Engagement_Handler::handle_certificate().
  • Method LLMS_Engagements::init() is deprecated with no replacement.
  • Method LLMS_Engagements::handle_achievement is deprecated in favor of LLMS_Engagement_Handler::handle_achievement.
  • Method LLMS_Engagements::handle_certificate is deprecated in favor of LLMS_Engagement_Handler::handle_certificate.
  • Method LLMS_Engagements::handle_email is deprecated in favor of LLMS_Engagement_Handler::handle_email.
  • Method LLMS_Database_Query::set_found_results() is deprecated.
  • Class LLMS_Achievement_User is deprecated with no direct replacement.
  • Method LLMS_Achievement_User::has_user_earned() is deprecated with no replacement.
  • Method LLMS_Achievement_User::init() is deprecated with no replacement.
  • Method LLMS_Achievement_User::trigger() is deprecated with no replacement.
  • Method LLMS_Achievement_User::get_content_html() is deprecated with no replacement.
  • Class LLMS_Certificate_User is deprecated with no direct replacement.
  • Method LLMS_Certificate_User::init() is deprecated with no replacement.
  • Method LLMS_Certificate_User::trigger() is deprecated with no replacement.
  • Method LLMS_Certificate_User::get_content_html() is deprecated with no replacement.
  • Method LLMS_Certificate_User::set_shortcode_user() is deprecated with no replacement.
  • Engagement debug logging is removed. Use llms_log() directly instead.
  • Filter llms_db_query_get_default_args is deprecated in favor of llms_{$this->id}_query_get_default_args.
  • Filter llms_certificate_has_user_earned is deprecated in favor of llms_earned_certificate_dupcheck.
  • Unused public class property LLMS_Achievements::$content is deprecated with no replacement.
  • Method LLMS_Admin_Post_Types::meta_metabox_init() is deprecated with no replacement.
  • The site options lifterlms_certificate_bg_img_width, lifterlms_certificate_bg_img_height, and lifterlms_certificate_legacy_image_size are now used only for certificates and certificate templates created using the classic editor.
  • The settings, found on the Engagements Settings screen, are hidden by default.
  • During the database upgrade from versions earlier than 6.x, an site option, llms_has_legacy_certificates is added when at least one certificate is found. This option will display the settings so they can continue to be used for legacy certificates.
  • After migrating all certificates on a site, the settings will still display. In order to remove them from the screen a developer can either delete the option llms_has_legacy_certificates or return false from the filter llms_has_legacy_certificates.
  • Method LLMS_Engagements::handle_certificate is deprecated in favor of LLMS_Engagement_Handler::handle_certificate. #290
  • Method LLMS_Engagements::handle_achievement is deprecated in favor of LLMS_Engagement_Handler::handle_achievement. #290
  • The constant LLMS_ENGAGEMENT_DEBUG is deprecated with no replacement.
  • Engagement debugging via LLMS_Engagements::log is deprecated. Use llms_log() instead.
  • Method LLMS_Engagements::handle_email is deprecated in favor of LLMS_Engagement_Handler::handle_email.
  • Filter lifterlms_register_post_type_llms_my_certificate is deprecated in favor of lifterlms_register_post_type_my_certificate.
  • Deprecated the misspelled protected method LLMS_Database_Query::preprare_query() and replaced with LLMS_Database_Query::prepare_query().
  • Class method LLMS_Events_Query::preprare_query replaced with LLMS_Events_Query::prepare_query().
  • Class method LLMS_Query_Quiz_Attempt::preprare_query replaced with LLMS_Query_Quiz_Attempt::prepare_query().
  • Class method LLMS_Query_User_Postmeta::preprare_query replaced with LLMS_Query_User_Postmeta::prepare_query().
  • Class method LLMS_Student_Query::preprare_query replaced with LLMS_Student_Query::prepare_query().
  • Class method LLMS_Notifications_Query::preprare_query replaced with LLMS_Notifications_Query::prepare_query().
  • Class method LLMS_Notifications_Query::preprare_query replaced with LLMS_Notifications_Query::prepare_query(). #859
Breaking Changes
  • Removed FSE template: templates/block-templates/single-certificate.html.
  • Removed the deprecated LLMS() function in favor of the llms() function.
  • Removed the deprecated the LLMS_SendWP::do_remote_install() method in favor of the LLMS_Abstract_Email_Provider::do_remote_install() method.
  • Removed the deprecated LLMS_Abstract_Email_Provider::output_css() method.
  • Removed the deprecated LLMS_Abstract_Generator_Posts::increment() method.
  • Removed the deprecated LLMS_Admin_Users_Table::load_dependencies() method.
  • Removed the deprecated LLMS_Admin_Import::localize_stat() method.
  • Removed the deprecated LLMS_Admin_Notices_Core::check_staging() method.
  • Removed the deprecated LLMS_Admin_Setup_Wizard::generator_course_status() method.
  • Removed the deprecated LLMS_Admin_Setup_Wizard::output_step_html() method.
  • Removed the deprecated LLMS_Admin_Setup_Wizard::scripts() method.
  • Removed the deprecated LLMS_Admin_Setup_Wizard::watch_course_generation() method.
  • Removed the deprecated llms_format_decimal() function.
  • Removed the deprecated llms_set_person_auth_cookie() function.
  • Removed the deprecated LLMS_Course::sections property.
  • Removed the deprecated LLMS_Course::sku property.
  • Removed the deprecated LLMS_Frontend_Assets::enqueue_inline_pw_script() method.
  • Removed the deprecated LLMS_Frontend_Assets::enqueue_inline_script() method.
  • Removed the deprecated LLMS_Frontend_Assets::is_inline_script_enqueued() method.
  • Removed the deprecated LLMS_Generator::add_custom_values() method.
  • Removed the deprecated LLMS_Generator::add_custom_values() method.
  • Removed the deprecated LLMS_Generator::format_date() method.
  • Removed the deprecated LLMS_Generator::get_author_id_from_raw() method.
  • Removed the deprecated LLMS_Generator::get_default_post_status() method.
  • Removed the deprecated LLMS_Generator::get_generated_posts() method.
  • Removed the deprecated LLMS_Generator::increment() method.
  • Removed the deprecated llms__created action hook from the LLMS_Abstract_Database_Store::create() method.
  • Removed the deprecated llms__deleted action hook from the LLMS_Abstract_Database_Store::delete() method.
  • Removed the deprecated llms__updated action hook from the LLMS_Abstract_Database_Store::update() method.
  • Removed the deprecated llms_user_removed_from_membership_level action hook from the LLMS_Student::unenroll() method.
  • Removed the deprecated and misspelled $purchaseable global variable in the lifterlms_template_pricing_table() function.
  • Removed the deprecated and misspelled $purchaseable global variable in the templates/product/pricing-table.php file.
  • Removed the deprecated LLMS_Frontend_Password class.
  • Removed the deprecated LLMS_Install::db_updates() method.
  • Removed the deprecated LLMS_Install::update_notice() method.
  • Removed the deprecated LLMS_Notifications::dispatch_processors() method.
  • Removed the deprecated llms_processors_async_dispatching filter hook from the LLMS_Notifications::__construct() method.
  • Removed the deprecated LLMS_Notifications::$_instance property.
  • Removed the deprecated LLMS_Person_Handler::register() method.
  • Removed the deprecated LLMS_Person_Handler::sanitize_field() method.
  • Removed the deprecated LLMS_Person_Handler::update() method.
  • Removed the deprecated LLMS_Person_Handler::validate_fields() method.
  • Removed the deprecated LLMS_Person_Handler::voucher_toggle_script() method.
  • Removed the deprecated templates/admin/notices/db-update.php file.
  • Removed the deprecated templates/admin/notices/db-updating.php file.
  • Removed the deprecated llms_usernames_blacklist filter hook in the llms_get_usernames_blocklist() function.
  • Removed the deprecated includes/libraries/wp-background-processing/index.php file.
  • Removed the deprecated includes/libraries/wp-background-processing/wp-async-request.php file.
  • Removed the deprecated includes/libraries/wp-background-processing/wp-background-process.php file.
  • Removed the deprecated LLMS_Section::get_next_available_lesson_order() method.
  • Removed the deprecated LLMS_Section::get_order() method.
  • Removed the deprecated LLMS_Section::get_parent_course() method.
  • Removed the deprecated LLMS_Section::set_parent_course() method.
  • Removed the deprecated LLMS_AJAX::check_voucher_duplicate() method.
  • Removed the deprecated LLMS_AJAX::get_ajax_data() method.
  • Removed the deprecated LLMS_AJAX::register_script() method.
  • Removed the deprecated LLMS_Interface_Post_Audio interface.
  • Removed the deprecated LLMS_Interface_Post_Sales_Page interface.
  • Removed the deprecated LLMS_Interface_Post_Video interface.
  • Removed the deprecated LLMS_Achievements::$_instance property.
  • Removed the deprecated LLMS_Certificates::$_instance property.
  • Removed the deprecated LLMS_Emails::$_instance property.
  • Removed the deprecated LLMS_Engagements::$_instance property.
  • Removed the deprecated LLMS_Events::$_instance property.
  • Removed the deprecated LLMS_Grades::$_instance property.
  • Removed the deprecated LLMS_Integrations::$_instance property.
  • Removed the deprecated LLMS_Payment_Gateways::$_instance property.
  • Removed the deprecated LLMS_Processors::$_instance property.
  • Removed the deprecated LLMS_Sessions::$_instance property.
Developer Notes
  • Added LLMS_Awards_Query, used for querying data about awarded certificates and achievements.
  • The method signature LLMS_Student::get_achievements() and LLMS_Student::get_certificates() now use this class under tho hood.
  • The previous method signature, which passed data into a direct SQL query, is now deprecated.
  • Achievement and certificate data storage locations have been modified, primarily to reduce reliance on the wp_postmeta table which will result in a site-wide performance improvement, especially on large sites.
  • Meta properties _llms_achievement_content and _llms_certificate_content have been removed in favor of WP_Post::$post_content.
  • Meta properties _llms_achievement_title and _llms_certificate_title have been removed in favor of WP_Post::$post_title.
  • Meta properties _llms_achievement_template and _llms_certificate_template have been removed in favor of WP_Post::$post_parent.
  • Meta properties _llms_achievement_image and _llms_certificate_image have been moved the meta property _thumbnail_id in order to utilize the WordPress core’s featured image functionality and internal APIs.
  • Reliance on lifterlms_user_postmeta for achievement and certificate data will be removed in a future release.
  • User postmeta properties _achievement_earned and _certificate_earned will continue to be recorded but are no longer being used internally.
  • The updated_date is now accessible via WP_Post::$post_date.
  • The user_id is now accessible via WP_Post::$post_author.
  • Added new Javascript UI components library, modeled after @wordpress/components. Read more.
  • Added a new SVG icon library, modeled after @wordpress/icons. Read more.
  • The merge code button seen on certificate and email template editors is now an SVG image instead of a PNG.
  • Added utility function for escaping and quoting strings. #1027
  • Added new utility function for stripping prefixes from strings.
Performance Improvements
  • Increased the number of files that are autoloaded instead of manually loaded.
Updated Templates

LifterLMS Version 5.10.0

Updates and Enhancements
  • Added an option to specify a custom checkout form title for free access plans. #1774
  • Updated LifterLMS Blocks to v2.3.2. #1774
Bug Fixes
  • Fixed ability to sort course students table by completed date. #1969
  • Fixed reporting issue encountered when a course has no lessons. #2012
  • Fixed broken checkout on Twenty Twenty-Two Theme when using the password strength meter. #1997
  • Fixed block template slug generation from path in Windows environments. #2001
  • Fixed an issue encountered when using the search box on the voucher admin posts list screen. #2005
Updated Templates

LifterLMS Version 6.0.0-beta.1

New Features
  • Added a link to return to the student dashboard when viewing an awarded certificate. #1959
  • The block editor is now enabled by default for certificates when using WordPress versions 5.8 and later.
  • Existing certificates are marked as “legacy” and will continue to use the classic editor until migrated.
  • To migrate a certificate, click the “Migrate Certificate” button. This will force the certificate’s content into blocks.
  • A number of new settings are available to certificates when using the block editor:
  • Set the certificate’s display (and print) size using common paper sizes such as US Letter, US Legal, A3, A4, and more.
  • Set the certificate’s display orientation: portrait of landscape.
  • Set the certificate’s inner margins.
  • Set the certificate’s background color.
  • A new block, the Certificate Title Block, has been made available to certificates.
  • The block works like a WordPress core Heading Block with added options for selecting from a few display fonts (provided by Google Web Fonts).
  • The block controls the title of awarded certificates.
  • + Added the ability to sync awarded certificates with the template used to generate them. #1078
  • The post_name of earned certificate posts will be generated with a randomized 3+ character string in favor of relying on sequential numbers.
  • Added the ability for administrators and LMS managers to edit earned certificates/achievements from the students reporting screen, as well as award new certificates/achievements to students.
  • + Added certificate global options for the default size of new certificates and certificate templates.
  • Certificate and email template merge code buttons now include [llms-user] information shortcodes.
  • Added certificate sequential ID functionality merge code.
Updates and Enhancements
  • Added pagination to achievement and certificate reporting pages.
  • Certificates no longer use the header.php and footer.php files from the site’s theme, instead custom templates (templates/certificates/header.php and templates/certificates/footer.php) are used instead. These templates are minimal and exclude theme wrappers which reduces the visual conflicts encountered from theme wrappers, backgrounds, and more, especially when printing certificates. #463
  • The achivements and certificates dashboard endpoints are now paginated. #669
  • Added new default images for use with achievements and certificates.
  • The site-wide default images can be customized on the admin panel under Settings -> Engagements.
  • The old default images can be used by filtering llms_use_legacy_engagement_images. #1081
  • The URL of earned user certificates has been changed from “my_certificate” to “certificate”. Requests to the old url are automatically redirected to the new url, including instances where the URL slug has been translated.
  • The URL of certificate temaplate previews has been changed from “certificate” to “certificate-template”.
  • The certificate merge code, {first_name}, now outputs an empty string in favor of falling back to the user’s nickname when there is no first name for the user. #1640
  • Updates LifterLMS REST to v1.0.0-beta.22.
  • The look and behavior of the certificate {{MINI_CERTIFICATE}} pop-over notification merge code now displays a placeholder preview of the certificate in favor of attempting to render a tiny version of the actual certificate. #1950
Bug Fixes
  • + Fixed how the protected LLMS_Notifications_Query::$found_results property is accessed in LLMS_Abstract_Notification_Controller::has_subscriber_received(). + Fixed how the protected LLMS_Notifications_Query::$max_pages property is accessed in lifterlms_template_student_dashboard_my_notifications().
  • Delayed engagements are automatically unscheduled when the related post is deleted.
  • Prior to sending a delayed engagement the recipient’s enrollment in the related post is verified resulting the engagement not being triggered if the recipient’s enrollment has been terminated. #290
  • A disabled student dashboard endpoint will no longer display the endpoint’s summary on the main dashboard page. #535
  • Post search filter boxes on various post tables will now longer display a link to the selected post.
  • Basic notification code is no longer loaded on the admin panel.
Deprecations
  • Public access to properties of the abstract LLMS_Database_Query has been deprecated.
  • Public access to class property LLMS_Database_Query::$found_results. The property is no longer publicly writable but can be read via LLMS_Database_Query::get_found_results().
  • Public access to class property LLMS_Database_Query::$max_pages. The property is no longer publicly writable but can be read via LLMS_Database_Query::get_max_pages().
  • Public access to class property LLMS_Database_Query::$number_results. The property is no longer publicly writable but can be read via LLMS_Database_Query::get_number_results().
  • Public access to class property LLMS_Database_Query::$results. The property is no longer publicly writable but can be read via LLMS_Database_Query::get_results().
  • Public access to class property LLMS_Database_Query::$query_vars. The variable as a whole cannot be publicly accessed, instead use LLMS_Database_Query::get() and LLMS_Database_Query::set() to read and write to the array.
  • The above changes were made to the abstract class LLMS_Database_Query but the following concrete classes that utilize the abstract are also affected by this change: LLMS_Query_User_Postmeta, LLMS_Student_Query, LLMS_Query_Quiz_Attempt, LLMS_Events_Query, and LLMS_Notifications_Query.
  • Class LLMS_Achievement_User is deprecated with no direct replacement.
  • Method LLMS_Achievement::is_enabled() is deprecated with no replacement.
  • Method LLMS_Achievement::get_blogname() is deprecated with no replacement.
  • Method LLMS_Achievement::format_string() is deprecated with no replacement.
  • Method LLMS_Achievement::get_title() is deprecated with no replacement.
  • Method LLMS_Achievement::get_content() is deprecated with no replacement.
  • Method LLMS_Achievement::get_content_html() is deprecated with no replacement.
  • Method LLMS_Achievement::create() is deprecated with no replacement.
  • Method LLMS_Achievements::trigger_engagement() is deprecated in favor of LLMS_Engagement_Handler::handle_achievement().
  • Class LLMS_Certificate is deprecated with no direct replacement.
  • Method LLMS_Certificate::is_enabled() is deprecated with no replacement.
  • Method LLMS_Certificate::get_blogname() is deprecated with no replacement.
  • Method LLMS_Certificate::format_string() is deprecated with no replacement.
  • Method LLMS_Certificate::get_title() is deprecated with no replacement.
  • Method LLMS_Certificate::get_content() is deprecated with no replacement.
  • Method LLMS_Certificate::get_content_html() is deprecated with no replacement.
  • Method LLMS_Certificate::get_title() is deprecated with no replacement.
  • Method LLMS_Certificates::trigger_engagement() is deprecated in favor of LLMS_Engagement_Handler::handle_certificate().
  • Method LLMS_Engagements::init() is deprecated with no replacement.
  • Method LLMS_Engagements::handle_achievement is deprecated in favor of LLMS_Engagement_Handler::handle_achievement.
  • Method LLMS_Engagements::handle_certificate is deprecated in favor of LLMS_Engagement_Handler::handle_certificate.
  • Method LLMS_Engagements::handle_email is deprecated in favor of LLMS_Engagement_Handler::handle_email.
  • Method LLMS_Database_Query::set_found_results() is deprecated.
  • Class LLMS_Achievement_User is deprecated with no direct replacement.
  • Method LLMS_Achievement_User::has_user_earned() is deprecated with no replacement.
  • Method LLMS_Achievement_User::init() is deprecated with no replacement.
  • Method LLMS_Achievement_User::trigger() is deprecated with no replacement.
  • Method LLMS_Achievement_User::get_content_html() is deprecated with no replacement.
  • Class LLMS_Certificate_User is deprecated with no direct replacement.
  • Method LLMS_Certificate_User::init() is deprecated with no replacement.
  • Method LLMS_Certificate_User::trigger() is deprecated with no replacement.
  • Method LLMS_Certificate_User::get_content_html() is deprecated with no replacement.
  • Method LLMS_Certificate_User::set_shortcode_user() is deprecated with no replacement.
  • Engagement debug logging is removed. Use llms_log() directly instead.
  • Filter llms_db_query_get_default_args is deprecated in favor of llms_{$this->id}_query_get_default_args.
  • Filter llms_certificate_has_user_earned is deprecated in favor of llms_earned_certificate_dupcheck.
  • Unused public class property LLMS_Achievements::$content is deprecated with no replacement.
  • Method LLMS_Admin_Post_Types::meta_metabox_init() is deprecated with no replacement.
  • The site options lifterlms_certificate_bg_img_width, lifterlms_certificate_bg_img_height, and lifterlms_certificate_legacy_image_size are now used only for certificates and certificate templates created using the classic editor.
  • The settings, found on the Engagements Settings screen, are hidden by default.
  • During the database upgrade from versions earlier than 6.x, an site option, llms_has_legacy_certificates is added when at least one certificate is found. This option will display the settings so they can continue to be used for legacy certificates.
  • After migrating all certificates on a site, the settings will still display. In order to remove them from the screen a developer can either delete the option llms_has_legacy_certificates or return false from the filter llms_has_legacy_certificates.
  • Method LLMS_Engagements::handle_certificate is deprecated in favor of LLMS_Engagement_Handler::handle_certificate. #290
  • Method LLMS_Engagements::handle_achievement is deprecated in favor of LLMS_Engagement_Handler::handle_achievement. #290
  • The constant LLMS_ENGAGEMENT_DEBUG is deprecated with no replacement.
  • Engagement debugging via LLMS_Engagements::log is deprecated. Use llms_log() instead.
  • Method LLMS_Engagements::handle_email is deprecated in favor of LLMS_Engagement_Handler::handle_email.
  • Filter lifterlms_register_post_type_llms_my_certificate is deprecated in favor of lifterlms_register_post_type_my_certificate.
  • Deprecated the misspelled protected method LLMS_Database_Query::preprare_query() and replaced with LLMS_Database_Query::prepare_query().
  • Class method LLMS_Events_Query::preprare_query replaced with LLMS_Events_Query::prepare_query().
  • Class method LLMS_Query_Quiz_Attempt::preprare_query replaced with LLMS_Query_Quiz_Attempt::prepare_query().
  • Class method LLMS_Query_User_Postmeta::preprare_query replaced with LLMS_Query_User_Postmeta::prepare_query().
  • Class method LLMS_Student_Query::preprare_query replaced with LLMS_Student_Query::prepare_query().
  • Class method LLMS_Notifications_Query::preprare_query replaced with LLMS_Notifications_Query::prepare_query().
  • Class method LLMS_Notifications_Query::preprare_query replaced with LLMS_Notifications_Query::prepare_query(). #859
Breaking Changes
  • Removed FSE template: templates/block-templates/single-certificate.html.
  • Removed the deprecated LLMS() function in favor of the llms() function.
  • Removed the deprecated the LLMS_SendWP::do_remote_install() method in favor of the LLMS_Abstract_Email_Provider::do_remote_install() method.
  • Removed the deprecated LLMS_Abstract_Email_Provider::output_css() method.
  • Removed the deprecated LLMS_Abstract_Generator_Posts::increment() method.
  • Removed the deprecated LLMS_Admin_Users_Table::load_dependencies() method.
  • Removed the deprecated LLMS_Admin_Import::localize_stat() method.
  • Removed the deprecated LLMS_Admin_Notices_Core::check_staging() method.
  • Removed the deprecated LLMS_Admin_Setup_Wizard::generator_course_status() method.
  • Removed the deprecated LLMS_Admin_Setup_Wizard::output_step_html() method.
  • Removed the deprecated LLMS_Admin_Setup_Wizard::scripts() method.
  • Removed the deprecated LLMS_Admin_Setup_Wizard::watch_course_generation() method.
  • Removed the deprecated llms_format_decimal() function.
  • Removed the deprecated llms_set_person_auth_cookie() function.
  • Removed the deprecated LLMS_Course::sections property.
  • Removed the deprecated LLMS_Course::sku property.
  • Removed the deprecated LLMS_Frontend_Assets::enqueue_inline_pw_script() method.
  • Removed the deprecated LLMS_Frontend_Assets::enqueue_inline_script() method.
  • Removed the deprecated LLMS_Frontend_Assets::is_inline_script_enqueued() method.
  • Removed the deprecated LLMS_Generator::add_custom_values() method.
  • Removed the deprecated LLMS_Generator::add_custom_values() method.
  • Removed the deprecated LLMS_Generator::format_date() method.
  • Removed the deprecated LLMS_Generator::get_author_id_from_raw() method.
  • Removed the deprecated LLMS_Generator::get_default_post_status() method.
  • Removed the deprecated LLMS_Generator::get_generated_posts() method.
  • Removed the deprecated LLMS_Generator::increment() method.
  • Removed the deprecated llms__created action hook from the LLMS_Abstract_Database_Store::create() method.
  • Removed the deprecated llms__deleted action hook from the LLMS_Abstract_Database_Store::delete() method.
  • Removed the deprecated llms__updated action hook from the LLMS_Abstract_Database_Store::update() method.
  • Removed the deprecated llms_user_removed_from_membership_level action hook from the LLMS_Student::unenroll() method.
  • Removed the deprecated and misspelled $purchaseable global variable in the lifterlms_template_pricing_table() function.
  • Removed the deprecated and misspelled $purchaseable global variable in the templates/product/pricing-table.php file.
  • Removed the deprecated LLMS_Frontend_Password class.
  • Removed the deprecated LLMS_Install::db_updates() method.
  • Removed the deprecated LLMS_Install::update_notice() method.
  • Removed the deprecated LLMS_Notifications::dispatch_processors() method.
  • Removed the deprecated llms_processors_async_dispatching filter hook from the LLMS_Notifications::__construct() method.
  • Removed the deprecated LLMS_Notifications::$_instance property.
  • Removed the deprecated LLMS_Person_Handler::register() method.
  • Removed the deprecated LLMS_Person_Handler::sanitize_field() method.
  • Removed the deprecated LLMS_Person_Handler::update() method.
  • Removed the deprecated LLMS_Person_Handler::validate_fields() method.
  • Removed the deprecated LLMS_Person_Handler::voucher_toggle_script() method.
  • Removed the deprecated templates/admin/notices/db-update.php file.
  • Removed the deprecated templates/admin/notices/db-updating.php file.
  • Removed the deprecated llms_usernames_blacklist filter hook in the llms_get_usernames_blocklist() function.
  • Removed the deprecated includes/libraries/wp-background-processing/index.php file.
  • Removed the deprecated includes/libraries/wp-background-processing/wp-async-request.php file.
  • Removed the deprecated includes/libraries/wp-background-processing/wp-background-process.php file.
  • Removed the deprecated LLMS_Section::get_next_available_lesson_order() method.
  • Removed the deprecated LLMS_Section::get_order() method.
  • Removed the deprecated LLMS_Section::get_parent_course() method.
  • Removed the deprecated LLMS_Section::set_parent_course() method.
  • Removed the deprecated LLMS_AJAX::check_voucher_duplicate() method.
  • Removed the deprecated LLMS_AJAX::get_ajax_data() method.
  • Removed the deprecated LLMS_AJAX::register_script() method.
  • Removed the deprecated LLMS_Interface_Post_Audio interface.
  • Removed the deprecated LLMS_Interface_Post_Sales_Page interface.
  • Removed the deprecated LLMS_Interface_Post_Video interface.
  • Removed the deprecated LLMS_Achievements::$_instance property.
  • Removed the deprecated LLMS_Certificates::$_instance property.
  • Removed the deprecated LLMS_Emails::$_instance property.
  • Removed the deprecated LLMS_Engagements::$_instance property.
  • Removed the deprecated LLMS_Events::$_instance property.
  • Removed the deprecated LLMS_Grades::$_instance property.
  • Removed the deprecated LLMS_Integrations::$_instance property.
  • Removed the deprecated LLMS_Payment_Gateways::$_instance property.
  • Removed the deprecated LLMS_Processors::$_instance property.
  • Removed the deprecated LLMS_Sessions::$_instance property.
Developer Notes
  • Added LLMS_Awards_Query, used for querying data about awarded certificates and achievements.
  • The method signature LLMS_Student::get_achievements() and LLMS_Student::get_certificates() now use this class under tho hood.
  • The previous method signature, which passed data into a direct SQL query, is now deprecated.
  • Achievement and certificate data storage locations have been modified, primarily to reduce reliance on the wp_postmeta table which will result in a site-wide performance improvement, especially on large sites.
  • Meta properties _llms_achievement_content and _llms_certificate_content have been removed in favor of WP_Post::$post_content.
  • Meta properties _llms_achievement_title and _llms_certificate_title have been removed in favor of WP_Post::$post_title.
  • Meta properties _llms_achievement_template and _llms_certificate_template have been removed in favor of WP_Post::$post_parent.
  • Meta properties _llms_achievement_image and _llms_certificate_image have been moved the meta property _thumbnail_id in order to utilize the WordPress core’s featured image functionality and internal APIs.
  • Reliance on lifterlms_user_postmeta for achievement and certificate data will be removed in a future release.
  • User postmeta properties _achievement_earned and _certificate_earned will continue to be recorded but are no longer being used internally.
  • The updated_date is now accessible via WP_Post::$post_date.
  • The user_id is now accessible via WP_Post::$post_author.
  • Added new Javascript UI components library, modeled after @wordpress/components. Read more.
  • Added a new SVG icon library, modeled after @wordpress/icons. Read more.
  • The merge code button seen on certificate and email template editors is now an SVG image instead of a PNG.
  • Added utility function for escaping and quoting strings. #1027
  • Added new utility function for stripping prefixes from strings.
Performance Improvements
  • Increased the number of files that are autoloaded instead of manually loaded.
Updated Templates

LifterLMS Version 5.9.0

Updates and Enhancements
  • Picture choice questions are now organized using flexbox in favor of a float-powered column layout.
  • Resolved PHP 8.1 deprecation warnings. #1859
Bug Fixes
  • Updated llms_get_endpoint_url() to better adhere to a site’s permalink structure with regards to the presence of a trailing slash in the generated url. #1983
  • Only allow users with edit_post capabilities to bypass content restrictions.
  • Fixed stretched images in quiz description/questions when using the Twenty Twenty-Two theme. #1976
Deprecations
  • Method LLMS_AJAX::check_voucher_duplicate() is deprecated in favor of LLMS_AJAX_HANDLER::check_voucher_duplicate().
Updated Templates

Preparing for LifterLMS 6.0.0

LifterLMS 6.0.0 is scheduled for release in mid to late February, 2022. In addition to various bug fixes and improvements, this major release focuses primarily on improving the creation and management of certificates.

As a major release, some backwards incompatible changes have been made to the code base. These changes have been noted in the changelogs and compiled in the Breaking Changes section below.

# Release Schedule

The following is our target release schedule for version 6.0.0. The dates of these prerelease builds may be adjusted and additional versions may be added. The date of General Public Release may be delayed but will not be released early.

Friday, February 11, 2022Alpha.4
Tuesday, February 15, 2022 +4dBeta.1
Monday, February 21, 2022 +6dBeta.2
Friday, February 25, 2022 +4dRC.1
Tuesday, March 1, 2022 +4dRC.2
Monday, March 7, 2022 +6d6.0.0 General Public Release

# Breaking Changes

We strive, wherever possible, to remain backwards compatible. Doing so ensures that themes and integrations do not have to worry about their code bases being negatively impacted by changes in LifterLMS. However, this also results in a larger code base full of many unused and deprecated functions, classes, and files.

All breaking changes were deprecated in previous versions of LifterLMS and have been recorded in the 6.0.0 alpha version changelogs. They are summarized here as well:

  • Removed the deprecated LLMS() function in favor of the llms() function.
  • Removed the deprecated LLMS_SendWP::do_remote_install() method in favor of the LLMS_Abstract_Email_Provider::do_remote_install() method.
  • Removed the deprecated LLMS_Abstract_Email_Provider::output_css() method.
  • Removed the deprecated LLMS_Abstract_Generator_Posts::increment() method.
  • Removed the deprecated LLMS_Admin_Users_Table::load_dependencies() method.
  • Removed the deprecated LLMS_Admin_Import::localize_stat() method.
  • Removed the deprecated LLMS_Admin_Notices_Core::check_staging() method.
  • Removed the deprecated LLMS_Admin_Setup_Wizard::generator_course_status() method.
  • Removed the deprecated LLMS_Admin_Setup_Wizard::output_step_html() method.
  • Removed the deprecated LLMS_Admin_Setup_Wizard::scripts() method.
  • Removed the deprecated LLMS_Admin_Setup_Wizard::watch_course_generation() method.
  • Removed the deprecated llms_format_decimal() function.
  • Removed the deprecated llms_set_person_auth_cookie() function.
  • Removed the deprecated LLMS_Course::sections property.
  • Removed the deprecated LLMS_Course::sku property.
  • Removed the deprecated LLMS_Frontend_Assets::enqueue_inline_pw_script() method.
  • Removed the deprecated LLMS_Frontend_Assets::enqueue_inline_script() method.
  • Removed the deprecated LLMS_Frontend_Assets::is_inline_script_enqueued() method.
  • Removed the deprecated LLMS_Generator::add_custom_values() method.
  • Removed the deprecated LLMS_Generator::add_custom_values() method.
  • Removed the deprecated LLMS_Generator::format_date() method.
  • Removed the deprecated LLMS_Generator::get_author_id_from_raw() method.
  • Removed the deprecated LLMS_Generator::get_default_post_status() method.
  • Removed the deprecated LLMS_Generator::get_generated_posts() method.
  • Removed the deprecated LLMS_Generator::increment() method.
  • Removed the deprecated llms__created action hook from the LLMS_Abstract_Database_Store::create() method.
  • Removed the deprecated llms__deleted action hook from the LLMS_Abstract_Database_Store::delete() method.
  • Removed the deprecated llms__updated action hook from the LLMS_Abstract_Database_Store::update() method.
  • Removed the deprecated llms_user_removed_from_membership_level action hook from the LLMS_Student::unenroll() method.
  • Removed the deprecated and misspelled $purchaseable global variable in the lifterlms_template_pricing_table() function.
  • Removed the deprecated and misspelled $purchaseable global variable in the templates/product/pricing-table.php file.
  • Removed the deprecated LLMS_Frontend_Password class.
  • Removed the deprecated LLMS_Install::db_updates() method.
  • Removed the deprecated LLMS_Install::update_notice() method.
  • Removed the deprecated LLMS_Notifications::dispatch_processors() method.
  • Removed the deprecated llms_processors_async_dispatching filter hook from the LLMS_Notifications::__construct() method.
  • Removed the deprecated LLMS_Notifications::$_instance property.
  • Removed the deprecated LLMS_Person_Handler::register() method.
  • Removed the deprecated LLMS_Person_Handler::sanitize_field() method.
  • Removed the deprecated LLMS_Person_Handler::update() method.
  • Removed the deprecated LLMS_Person_Handler::validate_fields() method.
  • Removed the deprecated LLMS_Person_Handler::voucher_toggle_script() method.
  • Removed the deprecated templates/admin/notices/db-update.php file.
  • Removed the deprecated templates/admin/notices/db-updating.php file.
  • Removed the deprecated llms_usernames_blacklist filter hook in the llms_get_usernames_blocklist() function.
  • Removed the deprecated includes/libraries/wp-background-processing/index.php file.
  • Removed the deprecated includes/libraries/wp-background-processing/wp-async-request.php file.
  • Removed the deprecated includes/libraries/wp-background-processing/wp-background-process.php file.
  • Removed the deprecated LLMS_Section::get_next_available_lesson_order() method.
  • Removed the deprecated LLMS_Section::get_order() method.
  • Removed the deprecated LLMS_Section::get_parent_course() method.
  • Removed the deprecated LLMS_Section::set_parent_course() method.
  • Removed the deprecated LLMS_AJAX::get_ajax_data() method.
  • Removed the deprecated LLMS_AJAX::register_script() method.
  • Removed the deprecated LLMS_Interface_Post_Audio interface.
  • Removed the deprecated LLMS_Interface_Post_Sales_Page interface.
  • Removed the deprecated LLMS_Interface_Post_Video interface.
  • Removed the deprecated LLMS_Achievements::$_instance property.
  • Removed the deprecated LLMS_Certificates::$_instance property.
  • Removed the deprecated LLMS_Emails::$_instance property.
  • Removed the deprecated LLMS_Engagements::$_instance property.
  • Removed the deprecated LLMS_Events::$_instance property.
  • Removed the deprecated LLMS_Grades::$_instance property.
  • Removed the deprecated LLMS_Integrations::$_instance property.
  • Removed the deprecated LLMS_Payment_Gateways::$_instance property.
  • Removed the deprecated LLMS_Processors::$_instance property.
  • Removed the deprecated LLMS_Sessions::$_instance property.

What Happens to 5.x?

LifterLMS does not maintain multiple forks. We support and maintain a single stable release.

Upon the public release of LifterLMS 6.0.0, all users are encouraged to update to this version. All future updates to LifterLMS will be updates to version 6.0.0.

Contributing as a Beta Tester

The prereleases are available publicly to anyone interested in helping the core team root out bugs and issues.

Beta testing is not always fun or easy. The prereleases are considered generally stable but you should still use caution and expect to find some issues.

If you find any issues, please let us know by filing a new bug report or submitting a support request.

If you have general comments or feedback on the beta let us know in the comments below or post a reply in GitHub on our 6.0.0 general feedback issue.

# How to Install a LifterLMS Pre-release

There are three ways to install a prerelease version for evaluation and testing. Please do not install prereleases on production websites!

  1. You can subscribe to the beta release channel using the LifterLMS Helper and to start receiving automatic updates for beta releases through the WordPress admin panel.
  2. You can download the latest releases directly from the LifterLMS GitHub repository and install the zip file as a plugin on the WordPress admin panel.

What Should a Beta Tester Look For?

The changes in this release primarily revolve around designing and creating certificates.

If you nave any 3rd-party integrations or themes installed on your site, you should check if developer has tested compatibility with LifterLMS 6.0.0 and, if they haven’t, ask them to do so as soon as possible to ensure there’s no issues when 6.0.0 is released to the stable channel.

If you have any custom code on your site, make sure it continues to function as expected and doesn’t utilize and code removed in this major release.

If you’ve added any CSS or custom code specific to the way certificates are viewed, you should see if it creates any issues with the changes to certificates.

If you encounter any problems you should let your developer know and if you get stuck, file a new bug report or submit a support request and we’ll point you in the right direction.

A Call to 3rd-Party Integration and Theme Developers

If you maintain a LifterLMS theme, plugin, or integration we need your help!

Please install the latest prerelease version and test your code against ours. If you find any issues along the way let us know by reporting an issue in GitHub.

After testing your integration please let us know by commenting on our 6.0.0 feedback issue.

A Call to LifterLMS Experts

If you’re a member of the LifterLMS Experts program please collaborate with us during this beta period and help us ensure the transition to version 6.0.0 is as smooth as possible for your clients.

We’d like you to, at the very least, install and test the beta in your own testing environment.

As an expert we expect that you have a few LifterLMS clients, possibly with custom templates and feature plugins. If your clients (and contracts) allow, please test (or help your clients test) the beta in a safe testing or staging environment.

If you encounter any issues or run tests and find that everything goes well, please let us know by posting in GitHub or by directly emailing your contact at LifterLMS.

LifterLMS Version 6.0.0-alpha.4

Updates and Enhancements
  • Removed usage of PHP features deprecated in PHP 8.1.
  • Added a link to return to the student dashboard when viewing an awarded certificate.
  • Allow block templates to be overridden from themes or plugins.
  • Added a “Reset Certificate” button to restore certificates to the default template.
  • Added links from achievement and certificate templates to view all awards generated from the template.
  • Added the ability to sync achievements (sync all awards to the parent template and sync one award to it’s parent).
  • Improved class autoloading.
Bug Fixes
  • Fixed certificate print compatibility issues with the OceanWP and Genesis themes.
  • Fixed custom font usage in the Certificate Title block to utilize WP Core functionality introduced in version 5.9.
  • Fixed access to protected properties in the LLMS_Notifications_Query class.
Breaking Changes
  • Removed the Single Certificate block template.