Bug Fixes
- Fixed an issue where the assignments builder may not have initialized by the time the core builder initialized.
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.@wordpress/i18n
functions in favor of LLMS.l10n
for client-side translation of strings found in the quiz interface.Countable
Javascript library in favor of words-count
.LLMS_Assets::init()
.LLMS_AQ_l10n
.LLMS_Advanced_Quizzes()
.