Bug Fixes
- Added flexbox support to picture reorder questions to fix layout issues when images of different sizes are used.
Updated Templates
- templates/quiz/questions/content-picture_reorder.php
post_name of earned certificate posts will be generated with a randomized 3+ character string in favor of relying on sequential numbers.[llms-user] information shortcodes.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. #463llms_use_legacy_engagement_images. #1081{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. #1640LLMS_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().LLMS_Database_Query has been deprecated.LLMS_Database_Query::$found_results. The property is no longer publicly writable but can be read via LLMS_Database_Query::get_found_results().LLMS_Database_Query::$max_pages. The property is no longer publicly writable but can be read via LLMS_Database_Query::get_max_pages().LLMS_Database_Query::$number_results. The property is no longer publicly writable but can be read via LLMS_Database_Query::get_number_results().LLMS_Database_Query::$results. The property is no longer publicly writable but can be read via LLMS_Database_Query::get_results().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.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.LLMS_Achievement_User is deprecated with no direct replacement.LLMS_Achievement::is_enabled() is deprecated with no replacement.LLMS_Achievement::get_blogname() is deprecated with no replacement.LLMS_Achievement::format_string() is deprecated with no replacement.LLMS_Achievement::get_title() is deprecated with no replacement.LLMS_Achievement::get_content() is deprecated with no replacement.LLMS_Achievement::get_content_html() is deprecated with no replacement.LLMS_Achievement::create() is deprecated with no replacement.LLMS_Achievements::trigger_engagement() is deprecated in favor of LLMS_Engagement_Handler::handle_achievement().LLMS_Certificate is deprecated with no direct replacement.LLMS_Certificate::is_enabled() is deprecated with no replacement.LLMS_Certificate::get_blogname() is deprecated with no replacement.LLMS_Certificate::format_string() is deprecated with no replacement.LLMS_Certificate::get_title() is deprecated with no replacement.LLMS_Certificate::get_content() is deprecated with no replacement.LLMS_Certificate::get_content_html() is deprecated with no replacement.LLMS_Certificate::get_title() is deprecated with no replacement.LLMS_Certificates::trigger_engagement() is deprecated in favor of LLMS_Engagement_Handler::handle_certificate().LLMS_Engagements::init() is deprecated with no replacement.LLMS_Engagements::handle_achievement is deprecated in favor of LLMS_Engagement_Handler::handle_achievement.LLMS_Engagements::handle_certificate is deprecated in favor of LLMS_Engagement_Handler::handle_certificate.LLMS_Engagements::handle_email is deprecated in favor of LLMS_Engagement_Handler::handle_email.LLMS_Database_Query::set_found_results() is deprecated.LLMS_Achievement_User is deprecated with no direct replacement.LLMS_Achievement_User::has_user_earned() is deprecated with no replacement.LLMS_Achievement_User::init() is deprecated with no replacement.LLMS_Achievement_User::trigger() is deprecated with no replacement.LLMS_Achievement_User::get_content_html() is deprecated with no replacement.LLMS_Certificate_User is deprecated with no direct replacement.LLMS_Certificate_User::init() is deprecated with no replacement.LLMS_Certificate_User::trigger() is deprecated with no replacement.LLMS_Certificate_User::get_content_html() is deprecated with no replacement.LLMS_Certificate_User::set_shortcode_user() is deprecated with no replacement.llms_log() directly instead.llms_db_query_get_default_args is deprecated in favor of llms_{$this->id}_query_get_default_args.llms_certificate_has_user_earned is deprecated in favor of llms_earned_certificate_dupcheck.LLMS_Achievements::$content is deprecated with no replacement.LLMS_Admin_Post_Types::meta_metabox_init() is deprecated with no replacement.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.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.llms_has_legacy_certificates or return false from the filter llms_has_legacy_certificates.LLMS_Engagements::handle_certificate is deprecated in favor of LLMS_Engagement_Handler::handle_certificate. #290LLMS_Engagements::handle_achievement is deprecated in favor of LLMS_Engagement_Handler::handle_achievement. #290LLMS_ENGAGEMENT_DEBUG is deprecated with no replacement.LLMS_Engagements::log is deprecated. Use llms_log() instead.LLMS_Engagements::handle_email is deprecated in favor of LLMS_Engagement_Handler::handle_email.lifterlms_register_post_type_llms_my_certificate is deprecated in favor of lifterlms_register_post_type_my_certificate.LLMS_Database_Query::preprare_query() and replaced with LLMS_Database_Query::prepare_query().LLMS_Events_Query::preprare_query replaced with LLMS_Events_Query::prepare_query().LLMS_Query_Quiz_Attempt::preprare_query replaced with LLMS_Query_Quiz_Attempt::prepare_query().LLMS_Query_User_Postmeta::preprare_query replaced with LLMS_Query_User_Postmeta::prepare_query().LLMS_Student_Query::preprare_query replaced with LLMS_Student_Query::prepare_query().LLMS_Notifications_Query::preprare_query replaced with LLMS_Notifications_Query::prepare_query().LLMS_Notifications_Query::preprare_query replaced with LLMS_Notifications_Query::prepare_query(). #859templates/block-templates/single-certificate.html.LLMS() function in favor of the llms() function.LLMS_SendWP::do_remote_install() method in favor of the LLMS_Abstract_Email_Provider::do_remote_install() method.LLMS_Abstract_Email_Provider::output_css() method.LLMS_Abstract_Generator_Posts::increment() method.LLMS_Admin_Users_Table::load_dependencies() method.LLMS_Admin_Import::localize_stat() method.LLMS_Admin_Notices_Core::check_staging() method.LLMS_Admin_Setup_Wizard::generator_course_status() method.LLMS_Admin_Setup_Wizard::output_step_html() method.LLMS_Admin_Setup_Wizard::scripts() method.LLMS_Admin_Setup_Wizard::watch_course_generation() method.llms_format_decimal() function.llms_set_person_auth_cookie() function.LLMS_Course::sections property.LLMS_Course::sku property.LLMS_Frontend_Assets::enqueue_inline_pw_script() method.LLMS_Frontend_Assets::enqueue_inline_script() method.LLMS_Frontend_Assets::is_inline_script_enqueued() method.LLMS_Generator::add_custom_values() method.LLMS_Generator::add_custom_values() method.LLMS_Generator::format_date() method.LLMS_Generator::get_author_id_from_raw() method.LLMS_Generator::get_default_post_status() method.LLMS_Generator::get_generated_posts() method.LLMS_Generator::increment() method.llms__created action hook from the LLMS_Abstract_Database_Store::create() method.llms__deleted action hook from the LLMS_Abstract_Database_Store::delete() method.llms__updated action hook from the LLMS_Abstract_Database_Store::update() method.llms_user_removed_from_membership_level action hook from the LLMS_Student::unenroll() method.$purchaseable global variable in the lifterlms_template_pricing_table() function.$purchaseable global variable in the templates/product/pricing-table.php file.LLMS_Frontend_Password class.LLMS_Install::db_updates() method.LLMS_Install::update_notice() method.LLMS_Notifications::dispatch_processors() method.llms_processors_async_dispatching filter hook from the LLMS_Notifications::__construct() method.LLMS_Notifications::$_instance property.LLMS_Person_Handler::register() method.LLMS_Person_Handler::sanitize_field() method.LLMS_Person_Handler::update() method.LLMS_Person_Handler::validate_fields() method.LLMS_Person_Handler::voucher_toggle_script() method.templates/admin/notices/db-update.php file.templates/admin/notices/db-updating.php file.llms_usernames_blacklist filter hook in the llms_get_usernames_blocklist() function.includes/libraries/wp-background-processing/index.php file.includes/libraries/wp-background-processing/wp-async-request.php file.includes/libraries/wp-background-processing/wp-background-process.php file.LLMS_Section::get_next_available_lesson_order() method.LLMS_Section::get_order() method.LLMS_Section::get_parent_course() method.LLMS_Section::set_parent_course() method.LLMS_AJAX::check_voucher_duplicate() method.LLMS_AJAX::get_ajax_data() method.LLMS_AJAX::register_script() method.LLMS_Interface_Post_Audio interface.LLMS_Interface_Post_Sales_Page interface.LLMS_Interface_Post_Video interface.LLMS_Achievements::$_instance property.LLMS_Certificates::$_instance property.LLMS_Emails::$_instance property.LLMS_Engagements::$_instance property.LLMS_Events::$_instance property.LLMS_Grades::$_instance property.LLMS_Integrations::$_instance property.LLMS_Payment_Gateways::$_instance property.LLMS_Processors::$_instance property.LLMS_Sessions::$_instance property.LLMS_Awards_Query, used for querying data about awarded certificates and achievements.LLMS_Student::get_achievements() and LLMS_Student::get_certificates() now use this class under tho hood.wp_postmeta table which will result in a site-wide performance improvement, especially on large sites._llms_achievement_content and _llms_certificate_content have been removed in favor of WP_Post::$post_content._llms_achievement_title and _llms_certificate_title have been removed in favor of WP_Post::$post_title._llms_achievement_template and _llms_certificate_template have been removed in favor of WP_Post::$post_parent._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.lifterlms_user_postmeta for achievement and certificate data will be removed in a future release._achievement_earned and _certificate_earned will continue to be recorded but are no longer being used internally.updated_date is now accessible via WP_Post::$post_date.user_id is now accessible via WP_Post::$post_author.@wordpress/components. Read more.@wordpress/icons. Read more.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. #1983edit_post capabilities to bypass content restrictions.LLMS_AJAX::check_voucher_duplicate() is deprecated in favor of LLMS_AJAX_HANDLER::check_voucher_duplicate().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.
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, 2022 | Alpha.4 |
| Tuesday, February 15, 2022 +4d | Beta.1 |
| Monday, February 21, 2022 +6d | Beta.2 |
| Friday, February 25, 2022 +4d | RC.1 |
| Tuesday, March 1, 2022 +4d | RC.2 |
| Monday, March 7, 2022 +6d | 6.0.0 General Public Release |
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:
LLMS() function in favor of the llms() function.LLMS_SendWP::do_remote_install() method in favor of the LLMS_Abstract_Email_Provider::do_remote_install() method.LLMS_Abstract_Email_Provider::output_css() method.LLMS_Abstract_Generator_Posts::increment() method.LLMS_Admin_Users_Table::load_dependencies() method.LLMS_Admin_Import::localize_stat() method.LLMS_Admin_Notices_Core::check_staging() method.LLMS_Admin_Setup_Wizard::generator_course_status() method.LLMS_Admin_Setup_Wizard::output_step_html() method.LLMS_Admin_Setup_Wizard::scripts() method.LLMS_Admin_Setup_Wizard::watch_course_generation() method.llms_format_decimal() function.llms_set_person_auth_cookie() function.LLMS_Course::sections property.LLMS_Course::sku property.LLMS_Frontend_Assets::enqueue_inline_pw_script() method.LLMS_Frontend_Assets::enqueue_inline_script() method.LLMS_Frontend_Assets::is_inline_script_enqueued() method.LLMS_Generator::add_custom_values() method.LLMS_Generator::add_custom_values() method.LLMS_Generator::format_date() method.LLMS_Generator::get_author_id_from_raw() method.LLMS_Generator::get_default_post_status() method.LLMS_Generator::get_generated_posts() method.LLMS_Generator::increment() method.llms__created action hook from the LLMS_Abstract_Database_Store::create() method.llms__deleted action hook from the LLMS_Abstract_Database_Store::delete() method.llms__updated action hook from the LLMS_Abstract_Database_Store::update() method.llms_user_removed_from_membership_level action hook from the LLMS_Student::unenroll() method.$purchaseable global variable in the lifterlms_template_pricing_table() function.$purchaseable global variable in the templates/product/pricing-table.php file.LLMS_Frontend_Password class.LLMS_Install::db_updates() method.LLMS_Install::update_notice() method.LLMS_Notifications::dispatch_processors() method.llms_processors_async_dispatching filter hook from the LLMS_Notifications::__construct() method.LLMS_Notifications::$_instance property.LLMS_Person_Handler::register() method.LLMS_Person_Handler::sanitize_field() method.LLMS_Person_Handler::update() method.LLMS_Person_Handler::validate_fields() method.LLMS_Person_Handler::voucher_toggle_script() method.templates/admin/notices/db-update.php file.templates/admin/notices/db-updating.php file.llms_usernames_blacklist filter hook in the llms_get_usernames_blocklist() function.includes/libraries/wp-background-processing/index.php file.includes/libraries/wp-background-processing/wp-async-request.php file.includes/libraries/wp-background-processing/wp-background-process.php file.LLMS_Section::get_next_available_lesson_order() method.LLMS_Section::get_order() method.LLMS_Section::get_parent_course() method.LLMS_Section::set_parent_course() method.LLMS_AJAX::get_ajax_data() method.LLMS_AJAX::register_script() method.LLMS_Interface_Post_Audio interface.LLMS_Interface_Post_Sales_Page interface.LLMS_Interface_Post_Video interface.LLMS_Achievements::$_instance property.LLMS_Certificates::$_instance property.LLMS_Emails::$_instance property.LLMS_Engagements::$_instance property.LLMS_Events::$_instance property.LLMS_Grades::$_instance property.LLMS_Integrations::$_instance property.LLMS_Payment_Gateways::$_instance property.LLMS_Processors::$_instance property.LLMS_Sessions::$_instance property.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.
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.
There are three ways to install a prerelease version for evaluation and testing. Please do not install prereleases on production websites!
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.
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.
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.
LLMS_Notifications_Query class.