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_nameof 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.phpandfooter.phpfiles from the site’s theme, instead custom templates (templates/certificates/header.phpandtemplates/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_resultsproperty is accessed inLLMS_Abstract_Notification_Controller::has_subscriber_received(). + Fixed how the protectedLLMS_Notifications_Query::$max_pagesproperty is accessed inlifterlms_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_Queryhas been deprecated. - Public access to class property
LLMS_Database_Query::$found_results. The property is no longer publicly writable but can be read viaLLMS_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 viaLLMS_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 viaLLMS_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 viaLLMS_Database_Query::get_results(). - Public access to class property
LLMS_Database_Query::$query_vars. The variable as a whole cannot be publicly accessed, instead useLLMS_Database_Query::get()andLLMS_Database_Query::set()to read and write to the array. - The above changes were made to the abstract class
LLMS_Database_Querybut 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, andLLMS_Notifications_Query. - Class
LLMS_Achievement_Useris 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 ofLLMS_Engagement_Handler::handle_achievement(). - Class
LLMS_Certificateis 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 ofLLMS_Engagement_Handler::handle_certificate(). - Method
LLMS_Engagements::init()is deprecated with no replacement. - Method
LLMS_Engagements::handle_achievementis deprecated in favor ofLLMS_Engagement_Handler::handle_achievement. - Method
LLMS_Engagements::handle_certificateis deprecated in favor ofLLMS_Engagement_Handler::handle_certificate. - Method
LLMS_Engagements::handle_emailis deprecated in favor ofLLMS_Engagement_Handler::handle_email. - Method
LLMS_Database_Query::set_found_results()is deprecated. - Class
LLMS_Achievement_Useris 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_Useris 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_argsis deprecated in favor ofllms_{$this->id}_query_get_default_args. - Filter
llms_certificate_has_user_earnedis deprecated in favor ofllms_earned_certificate_dupcheck. - Unused public class property
LLMS_Achievements::$contentis 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, andlifterlms_certificate_legacy_image_sizeare 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_certificatesis 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_certificatesor returnfalsefrom the filterllms_has_legacy_certificates. - Method
LLMS_Engagements::handle_certificateis deprecated in favor ofLLMS_Engagement_Handler::handle_certificate. #290 - Method
LLMS_Engagements::handle_achievementis deprecated in favor ofLLMS_Engagement_Handler::handle_achievement. #290 - The constant
LLMS_ENGAGEMENT_DEBUGis deprecated with no replacement. - Engagement debugging via
LLMS_Engagements::logis deprecated. Usellms_log()instead. - Method
LLMS_Engagements::handle_emailis deprecated in favor ofLLMS_Engagement_Handler::handle_email. - Filter
lifterlms_register_post_type_llms_my_certificateis deprecated in favor oflifterlms_register_post_type_my_certificate. - Deprecated the misspelled protected method
LLMS_Database_Query::preprare_query()and replaced withLLMS_Database_Query::prepare_query(). - Class method
LLMS_Events_Query::preprare_queryreplaced withLLMS_Events_Query::prepare_query(). - Class method
LLMS_Query_Quiz_Attempt::preprare_queryreplaced withLLMS_Query_Quiz_Attempt::prepare_query(). - Class method
LLMS_Query_User_Postmeta::preprare_queryreplaced withLLMS_Query_User_Postmeta::prepare_query(). - Class method
LLMS_Student_Query::preprare_queryreplaced withLLMS_Student_Query::prepare_query(). - Class method
LLMS_Notifications_Query::preprare_queryreplaced withLLMS_Notifications_Query::prepare_query(). - Class method
LLMS_Notifications_Query::preprare_queryreplaced withLLMS_Notifications_Query::prepare_query(). #859
Breaking Changes
- Removed FSE template:
templates/block-templates/single-certificate.html. - Removed the deprecated
LLMS()function in favor of thellms()function. - Removed the deprecated the
LLMS_SendWP::do_remote_install()method in favor of theLLMS_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::sectionsproperty. - Removed the deprecated
LLMS_Course::skuproperty. - 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__createdaction hook from theLLMS_Abstract_Database_Store::create()method. - Removed the deprecated
llms__deletedaction hook from theLLMS_Abstract_Database_Store::delete()method. - Removed the deprecated
llms__updatedaction hook from theLLMS_Abstract_Database_Store::update()method. - Removed the deprecated
llms_user_removed_from_membership_levelaction hook from theLLMS_Student::unenroll()method. - Removed the deprecated and misspelled
$purchaseableglobal variable in thelifterlms_template_pricing_table()function. - Removed the deprecated and misspelled
$purchaseableglobal variable in thetemplates/product/pricing-table.phpfile. - Removed the deprecated
LLMS_Frontend_Passwordclass. - 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_dispatchingfilter hook from theLLMS_Notifications::__construct()method. - Removed the deprecated
LLMS_Notifications::$_instanceproperty. - 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.phpfile. - Removed the deprecated
templates/admin/notices/db-updating.phpfile. - Removed the deprecated
llms_usernames_blacklistfilter hook in thellms_get_usernames_blocklist()function. - Removed the deprecated
includes/libraries/wp-background-processing/index.phpfile. - Removed the deprecated
includes/libraries/wp-background-processing/wp-async-request.phpfile. - Removed the deprecated
includes/libraries/wp-background-processing/wp-background-process.phpfile. - 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_Audiointerface. - Removed the deprecated
LLMS_Interface_Post_Sales_Pageinterface. - Removed the deprecated
LLMS_Interface_Post_Videointerface. - Removed the deprecated
LLMS_Achievements::$_instanceproperty. - Removed the deprecated
LLMS_Certificates::$_instanceproperty. - Removed the deprecated
LLMS_Emails::$_instanceproperty. - Removed the deprecated
LLMS_Engagements::$_instanceproperty. - Removed the deprecated
LLMS_Events::$_instanceproperty. - Removed the deprecated
LLMS_Grades::$_instanceproperty. - Removed the deprecated
LLMS_Integrations::$_instanceproperty. - Removed the deprecated
LLMS_Payment_Gateways::$_instanceproperty. - Removed the deprecated
LLMS_Processors::$_instanceproperty. - Removed the deprecated
LLMS_Sessions::$_instanceproperty.
Developer Notes
- Added
LLMS_Awards_Query, used for querying data about awarded certificates and achievements. - The method signature
LLMS_Student::get_achievements()andLLMS_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_postmetatable which will result in a site-wide performance improvement, especially on large sites. - Meta properties
_llms_achievement_contentand_llms_certificate_contenthave been removed in favor ofWP_Post::$post_content. - Meta properties
_llms_achievement_titleand_llms_certificate_titlehave been removed in favor ofWP_Post::$post_title. - Meta properties
_llms_achievement_templateand_llms_certificate_templatehave been removed in favor ofWP_Post::$post_parent. - Meta properties
_llms_achievement_imageand_llms_certificate_imagehave been moved the meta property_thumbnail_idin order to utilize the WordPress core’s featured image functionality and internal APIs. - Reliance on
lifterlms_user_postmetafor achievement and certificate data will be removed in a future release. - User postmeta properties
_achievement_earnedand_certificate_earnedwill continue to be recorded but are no longer being used internally. - The
updated_dateis now accessible viaWP_Post::$post_date. - The
user_idis now accessible viaWP_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
metaarg. #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
- templates/achievements/loop.php
- templates/achievements/template.php
- templates/admin/notices/db-update.php
- templates/admin/notices/db-updating.php
- templates/admin/reporting/reporting.php
- templates/admin/reporting/tabs/students/courses-course.php
- templates/admin/reporting/tabs/students/information.php
- templates/block-templates/single-certificate.html
- templates/certificates/actions.php
- templates/certificates/content-legacy.php
- templates/certificates/content.php
- templates/certificates/dynamic-styles.php
- templates/certificates/footer.php
- templates/certificates/header.php
- templates/certificates/loop.php
- templates/certificates/preview.php
- templates/certificates/template.php
- templates/checkout/form-switch-source.php
- templates/content-certificate.php
- templates/emails/footer.php
- templates/emails/header.php
- templates/myaccount/my-grades-single-table.php
- templates/myaccount/view-order-actions.php
- templates/myaccount/view-order-information.php
- templates/myaccount/view-order-transactions.php
- templates/myaccount/view-order.php
- templates/product/pricing-table.php
- templates/single-certificate.php
