LifterLMS

LifterLMS Version 6.0.0-rc.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. Read more.
  • Provide additional information to hooks on the student single course reporting screen.
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.23.
  • Updated LifterLMS Blocks to version 2.4.0.
  • 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 the ability to force an admin metabox field value through the new meta arg. #2016
  • 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 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

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.

LifterLMS Version 5.8.0

New Features
  • Add theme support for the Twenty Twenty-Two theme. #1824
  • Added WordPress Full Site Editing compatibility for various LifterLMS-powered templates.
Updates and Enhancements
  • The minimum required WordPress core version is now version 5.5.
  • Tested against WordPress version 5.9.
  • Updated LifterLMS Blocks: v2.3.0, v2.3.1.
  • Remove the “description” registered with LifterLMS custom post types. #710
Updated Templates

LifterLMS Version 6.0.0-alpha.3

Updates and Enhancements
  • Automatically dequeue print-only stylesheets to reduce theme and plugin conflicts when printing certificates.
  • Only enable the Certificate Title block font-family selector for WordPress 5.9 and later.
  • Only enable the Block Editor for certificates on WordPress 5.8 and later.
  • Replaced welcome message placeholder text with a real welcome message.
Bug Fixes
  • Explicitly define a default font-family (“default”) for the Certificate Title block.
  • Fixed visual issues encountered on certificates when resizing the browser window.
  • Fixed issue with the certificate block template on WordPress 5.8 (divider blocks aren’t centered by default).
Breaking Changes
  • 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.

LifterLMS Version 5.7.0

Updates and Enhancements
  • Informed developers about the deprecated LLMS_Section::get_next_available_lesson_order() method.
  • Informed developers about the deprecated LLMS_Section::get_order() method.
  • Informed developers about the deprecated LLMS_Section::get_parent_course() method.
  • Informed developers about the deprecated LLMS_Section::set_parent_course() method.
Deprecations
  • Deprecated LLMS_Frontend_Assets::enqueue_inline_pw_script() with no replacement.
  • Deprecated the LLMS_Lesson::get_order() method in favor of the LLMS_Lesson::get( 'order' ) method.
  • Deprecated the LLMS_Lesson::get_parent_course() method in favor of the LLMS_Lesson::get( 'parent_course' ) method.
  • Deprecated the LLMS_Lesson::set_parent_course() method in favor of the LLMS_Lesson::set( 'parent_course', $course_id ) method.
  • Deprecated the LLMS_AJAX_Handler::add_lesson_to_course() method with no replacement.
  • Deprecated the LLMS_AJAX_Handler::create_lesson() method with no replacement.
  • Deprecated the LLMS_AJAX_Handler::create_section() method with no replacement.
  • Deprecated the LLMS_Lesson_Handler::assign_to_course() method with no replacement.
  • Deprecated the LLMS_Post_Handler::create_section() method with no replacement.
Updated Templates

LifterLMS Version 6.0.0-alpha.2

New Features
  • Added certificate global options for the default size of new certificates and certificate templates.
Updates and enhancements
  • 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.
  • Restore certificate save hooks after executing callback updates to facilitate scenarios where more than one certificate is updated in a single request.
Bug Fixes
  • Only register the Certificate Title block for use on certificate post types.
Updated Templates