LearnDash
Recent Updates
Security
- Tightened validation of the data submitted through the user registration and account update forms.
Fixes
- Resolved an issue causing duplicate "not logged in" emails when one-time only is enabled.
Fixes
- Added compatibility with PHP 8.5.
Tweaks
- Improved the unified licensing page experience.
Tweaks
- Improved the unified licensing page experience.
Security
- Added direct file access guards to prevent PHP files from being executed outside of WordPress.
Tweaks
- Added compatibility with WordPress 7.0.2.
Fixes
- Resolved fatal error on lesson page caused by type hints on WPML compatibility filter callback.
Fixes
- Resolved an issue where
learndash_user_progress_get_previous_incomplete_step()returned the current step ID instead of false when no previous step was incomplete, which could cause integrations to treat the current step as a blocker. - Resolved an issue where a Group Leader could not be added as a member of another group while Managed Groups Auto-enrollment was enabled.
- Resolved an issue where resetting a challenge exam from a user profile did not reset the associated course progress, leaving the course and its steps marked complete.
Tweaks
- Improved the consistency of the recursion guard used when saving course step post meta.
- Improved the discoverability of the unified software management screen by intercepting the entry of unified license keys on the legacy licensing screen.
- Updated functions:
learndash_get_users_group_ids,learndash_user_progress_get_previous_incomplete_step.
Fixes
- Resolved an issue where the Detailed Course Reports XLS export returned data from a previous export instead of the current course, group, and date-range selection.
- Resolved an issue where the Quiz Attempts Learner Answers XLSX export failed to generate when a quiz title exceeded 31 characters, on the Quiz Statistics report.
Tweaks
- Added filters:
learndash_propanel_course_export_ttl.
Fixes
- Resolved an issue where the team member add form showed no validation message when the email already belonged to an existing user.
Fixes
- Notifications configured against a WPML-translated group or course were not correctly triggered when enrollment uses the original-language post ID.
- Resolved an issue in the "A scheduled lesson is available to user" trigger where processing could skip remaining users and notifications when a delayed email was already queued.
- Resolved an issue in the "A scheduled lesson is available to user" trigger where the duplicate-send check did not properly filter by notification ID.
- Resolved an issue that caused the "X Days After Course Expires" trigger to not work correctly.
- Resolved an issue where a corrupt or orphaned queue item could deadlock the delayed notification queue, blocking all delayed notifications from sending.
- Resolved an issue where the "Complete a course" notification did not record the sent flag correctly, causing duplicate sends for the same user and course.
- Resolved an issue where the "User hasn't logged in for X days" trigger silently skipped enrolled students who carried the administrator role, producing no log entry, no queued email, and no notification.
- Resolved an issue where the "X days before/after course expires" and "A scheduled lesson is available" triggers silently skipped enrolled students who carried the administrator role.
- Resolved implicit-nullable type hints in
gather_emails()that caused deprecation notices on PHP 8.4.
Tweaks
- Added error logging when a delayed notification failed to insert into the queue, making silent database failures visible in the log.