MemberDash 0.4.7 is out. It’s a reliability release. Members keep the course access their memberships entitle them to through pauses, cancellations, renewals and team changes, and they keep their course history when they come back. On large sites, a membership change no longer gets stuck halfway.
First, the practical bit
If your license is active, the update is waiting in your WordPress admin under Dashboard > Updates, or on the plugin’s row under Plugins > Installed Plugins. If you’d rather download it, sign in to Tangible Cloud, open Downloads, and get the zip from there.
MemberDash still needs LearnDash, WooCommerce and WooCommerce Memberships active, plus Teams for WooCommerce Memberships if you use teams. Your plans, rules and settings carry over as they are.
If you’re coming from 0.4.3, the update runs a one-time repair of course access records in the background after it installs. On a large site this takes a little while. You don’t need to do anything, and members keep their access while it runs.
As with any update that touches access, try it on a staging copy first if you can, especially if a lot of members depend on it.
Members who come back keep their history
When a membership was paused, cancelled or expired and then reactivated, LearnDash used to treat the member as newly enrolled. Their Enrolled On date reset to the day they came back, and anything that counts from that date (drip-fed lessons, course access expiry, reports) started over.
Now MemberDash saves the original date when access is removed and puts it back when the membership is active again. Each membership keeps its own saved date. A member who buys a brand new membership starts fresh, and one membership never overwrites another’s history.
Two related fixes:
- Members who are also in a LearnDash group didn’t always get the membership’s own courses back on reactivation. They do now.
- If a member reactivates while a course removal is still queued, the removal no longer runs against the membership that’s active again.
Removing access only where it should go
MemberDash has always checked whether a member still holds a course another way before taking it away. 0.4.7 makes that check stricter and the removal itself more dependable:
- Permanently deleting a membership now removes the course access it granted. Access the member still holds through another active membership or a LearnDash group stays in place.
- A course is only recorded as granted once LearnDash has actually granted it.
- A once-a-day check looks for paused, cancelled or expired memberships whose course removal never finished, and finishes it. Courses held through another membership or a group are left alone.
Big changes no longer stop halfway
A change to one membership is applied straight away, in the same request. A change to many memberships at once, such as a bulk status change on the Members screen, applies the first ones straight away. The rest are queued as background tasks after about two seconds of work, so no single page load does an unbounded amount. There’s no setting to manage.
Every sync also leaves a backup copy in the queue while it runs. If the page load dies partway through, for example from a timeout or a fatal error on a busy host, the backup finishes the job a couple of minutes later. On a healthy site the backup is removed as soon as the sync completes, and you’ll never see it.
Background tasks need your site’s scheduled actions to be running. If they’ve stopped, which usually means WP-Cron is disabled or blocked by the host, MemberDash now tells you. Anyone who can manage WooCommerce gets a dashboard warning when course access updates have been waiting more than 15 minutes. The warning links straight to the waiting actions and clears itself once they’ve run. The Troubleshooting page explains what to do about it.
Teams
- Adding a member to a WooCommerce team now grants the plan’s courses. Before, the new member could be left without them.
- A member moved from one team to another no longer loses the access that comes with the new team.
- The team CSV upload button no longer fails when the team’s subscription can’t be loaded.
Upgrading from 0.4.3
The repair that runs after upgrading from 0.4.3 now works through members in batches, so it finishes on large sites and strict hosts instead of timing out partway. If it is interrupted, it picks up where it stopped, and once it’s done it doesn’t run again.
Running alongside LearnDash WooCommerce
MemberDash and the official LearnDash WooCommerce plugin both grant and remove LearnDash course access when orders and memberships change. If both are active, one can undo what the other did, so 0.4.7 shows a warning in your WordPress admin when it finds LearnDash WooCommerce active alongside it. If you sell memberships through MemberDash and don’t need LearnDash WooCommerce for anything else, deactivate it. If you need both, get in touch with support first.
If a member’s access is out of step
If a member has an active membership but is missing a course (after a site migration, a restored backup, or an issue on an older version), open their membership under WooCommerce > Memberships > Members and click Save without changing anything. That re-runs the sync for the membership. Missing courses are granted, and courses the member already holds keep their enrolment dates. There’s more in the Troubleshooting docs.
Full changelog
0.4.7
Release Date: 2026-09-24
Course access lifecycle
- Fixed: a member’s original “Enrolled On” date is restored when their membership is reactivated after a pause, cancellation or expiry. Each membership keeps its own saved date, so a new membership never inherits an old one’s history and one membership can never discard another’s
- Fixed: members who also belong to a LearnDash group were not re-granted the membership’s own course access on reactivation
- Fixed: a queued course removal no longer runs against a membership that has since become active again; removals for a membership that no longer exists are ignored
- Fixed: permanently deleting a membership now removes its course access reliably, without touching access still granted by another active membership or a group
- Fixed: a course was sometimes marked as granted before LearnDash had actually granted it
- Fixed: one membership status change queued the same sync twice
- Changed: course access for a single membership change is applied immediately, in the same request. A request that changes many memberships at once (such as a bulk status change on the memberships list) applies the first ones immediately and queues the rest as background jobs once it has spent about two seconds on sync, so no request does unbounded work and there is no setting to choose a mode
- Added: a safety copy of every sync is queued before it runs and removed once it completes, so a request that dies part-way through a large sync (a timeout, a fatal error) is finished by the queue a couple of minutes later instead of leaving a half-applied membership. On a healthy site the copy never runs and leaves no trace
- Added: a dashboard warning for site managers when queued course-access updates have been waiting more than 15 minutes, which usually means the site’s scheduled actions are not running. It links to the waiting actions and clears itself once they run
- Added: a daily reconciliation run that finds paused, cancelled or expired memberships whose course removal never completed and runs it, respecting access still held through another membership or group. The run carries the exact list of courses it detected into the removal (a course listed by the plan but missing from the membership’s own records is no longer left behind), marks memberships it finds already clean so they are not re-checked every day, and never queues the same continuation twice
- Fixed: a course removal delivered twice no longer makes a second call to LearnDash for a course the learner no longer holds
- Added: before a membership removes course access, the list of access the learner holds through other sources is passed through a filter, so a site that also sells courses directly can keep those courses in place. The plugin itself still only recognises another active membership; a listener can add to the list, never take from it, and a faulty listener cannot break the sync. Internal for now, the shape may change
Teams
- Fixed: adding a member to a WooCommerce Team did not grant the plan’s courses
- Fixed: a member moved from one team to another had their access removed from the new team
- Fixed: the team CSV upload button failed when the team’s subscription could not be loaded
- Fixed: plan rules saved under the pre-rename meta key are now read everywhere they are used
Testing
- Added: a contract test suite under tests/contract that runs with plain PHP (no WordPress install or database): 30 rows for the membership → course-access lifecycle and 51 rows for the reconciliation run, one per line of a written scenario table
Upgrade repair
- Fixed: the course-access repair that runs after upgrading from 0.4.3 now processes members in batches, so it completes on large sites and strict hosts instead of timing out part-way
- Fixed: an interrupted repair resumes automatically from where it stopped instead of staying stuck behind a stale lock
- Fixed: the repair no longer re-runs on every page load once complete
- Added: a warning when the official LearnDash WooCommerce plugin is also active, since both manage the same course access
Questions about the update? Get in touch with support.