AccessTrace For LearnDash Wordpress Plugin - Rating, Reviews, Demo & Download
Plugin Description
Know exactly what happened to a student’s course access, who or what caused it, and whether it looks right.
When a student says “I lost access to my course” or “I paid but I’m not enrolled”, AccessTrace for LearnDash gives you the answer in seconds. It keeps a clear, searchable record of every enrollment and unenrollment on your site, shows the likely cause, and tells you whether the change makes sense.
It is a passive tool: it only watches and records. It never enrolls or unenrolls anyone, restores access or changes expiry dates, and a logging problem can never block a student’s enrollment.
What you get
- A complete enrollment history. Every enrollment and unenrollment is recorded with the student, course, date and time, and who or what made the change.
- The cause, not a guess. See whether a change came from an administrator, a WooCommerce purchase or refund, access expiry, a scheduled task, WP-CLI or the REST API. When the cause can’t be proven it says “Unknown” instead of making something up.
- Valid, Invalid or Unknown at a glance. Each event is checked and labelled. “Invalid” means something looks wrong, for example a student was unenrolled while their access was still active and no administrator did it. It is worth a look, not proof of a bug.
- Fast search and filters. Search by student name, username, email or ID, or by course. Filter by action, status, source and date range. Active filters appear as chips you can remove one at a time.
- Event details. Open any event to see the full story: cause, trigger, who acted, status and the reason for it.
- Export to CSV. Download exactly what you are looking at, to share with your team or a support agent. Opens correctly in Excel, Numbers and Google Sheets.
Email alerts for administrators
Get told when something needs attention, without watching the log.
- Turn alerts on or off with one switch.
- Choose who receives them (defaults to the site admin email).
- Choose what triggers an email: invalid events only (recommended), unenrollments, enrollments, unknown events, or everything. Optionally limit alerts to chosen sources.
- Receive each alert immediately, or as an hourly or daily summary.
- A rate limit protects your inbox during bulk imports: extra events arrive together in one summary email.
- Write your own subject and message with simple placeholders such as {user_name}, {course_title}, {action}, {status} and {log_url}. Choose plain text or HTML, and optionally set the sender name and address.
- The student’s email address is hidden in alerts unless you choose to show it.
- Send yourself a test email to see exactly how alerts will look.
Emails go out through your own site’s mail setup. Nothing is sent to any outside service.
Stay in control of your data
- Pause logging, or choose whether to record enrollments, unenrollments or both.
- Ignore specific courses.
- Delete old events automatically after 30 days up to 2 years, or keep them forever.
- Choose what happens on uninstall: keep your logs (default) or remove everything.
- Optionally erase a user’s events when their account is deleted.
- Works with the WordPress Export and Erase Personal Data tools, and adds suggested text for your privacy policy.
Built to stay out of the way
- No effect on page speed. Nothing runs unless course access actually changes.
- The log and the export stay fast, even with a large history.
- Only administrators can see the log and settings (developers can change this with a filter).
- Never stores passwords, IP addresses or email addresses in the log.
This plugin is an independent project. It is not affiliated with, endorsed by or sponsored by LearnDash, which is a trademark of its respective owner.
Need help, a custom integration, or want to support development? Get in touch.
Support: Support – wpforwards.com
Requirements
- WordPress 5.8+
- PHP 7.4+
- LearnDash (LearnDash tested up to: 5.2.0). If LearnDash is missing the plugin does not fatal, shows an admin notice, and starts logging once LearnDash becomes available.
For developers
How detection works
The plugin listens to LearnDash’s course access hooks. Events are queued and processed at shutdown, so the expiry signal is recognised regardless of the order LearnDash fires its hooks. Flow: LearnDash hook > event detector > source and trigger detection > verification > event manager > log table. Source and actor are reported only when evidence supports them (admin screen with a privileged user, cron, WP-CLI, REST, a WooCommerce order hook, or the learndash_user_course_access_expired hook). Otherwise the value is unknown. An event is skipped when it repeats the same action for the same user and course within 5 seconds; enroll, unenroll, enroll sequences are always logged.
LearnDash hooks and functions used
Checked in the LearnDash developer documentation (developers.learndash.com):
- Action
learndash_update_course_access( $user_id, $course_id, $course_access_list, $remove ), since 2.1.0. Fires for enrollment ($removefalse) and unenrollment ($removetrue). - Action
learndash_user_course_access_expired( $user_id, $course_id ), since 2.6.2. - Function
ld_course_access_expires_on( $course_id, $user_id )returns an expiry timestamp. sfwd_lms_has_access()is deliberately not called: it can run LearnDash’s expiry processing and change enrollments, and this plugin is strictly passive.
The documentation specific to LearnDash 5.2.0 was not reachable during development, so no 5.x-specific change could be confirmed or ruled out. Only long-standing hooks are used and every LearnDash call is guarded. Please test on a staging site.
Extension points
Filters: evlfl_capability, evlfl_event_context, evlfl_resolve_source, evlfl_resolve_trigger, evlfl_resolve_actor, evlfl_verify_event, evlfl_sources, evlfl_triggers, evlfl_logs_per_page, and evlfl_should_notify( $send, $event, $id ) (final say on whether an admin email is sent for a logged event).
Actions: evlfl_event_logged( $id, $event ).
Integrations can supply the source, trigger and actor of their own enrollments through the evlfl_resolve_* filters without changing core logging.
Known limitations
- Not every source can be determined. WooCommerce, memberships, imports and custom code often appear as
unknownunless an integration supplies the source. - Admin-screen actions are recorded as admin/manual (detected, not confirmed): another plugin acting for an admin in wp-admin can look identical.
- Verification uses a snapshot at event time; it does not re-check later.
- Dates in the filter use the site timezone; times are stored in UTC.
- Events are processed at shutdown; a PHP crash mid-request can lose queued events.
Sample data
For development only, define EVLFL_ENABLE_TEST_DATA as true in wp-config.php to show a “Generate sample events” button. It writes sample rows to the log table only and never touches real enrollments.
Screenshots
No screenshots provided

