v1.7.0 Latest
New
- Live sessions have a Join link, a start time, and a duration. Students see a countdown before it starts, a Join button while it runs, and a clear "session has ended" afterwards.
- Images in lessons and course content can be set to a width (25%, 50%, 75%, 100%) and aligned left, center, or right, with text flowing around them. On phones they go full width automatically.
- Courses can be duplicated from the Courses list. The copy is created as a draft with the full curriculum.
- Refunds can be partial, and a sale stays refundable until it is refunded in full. Refund 25.00 of a 100.00 order today and the Refund button offers the remaining 75.00 later. Only a full refund revokes access and reverses commission.
- The grace period for a failed subscription payment is configurable under Settings, Payments (0 to 90 days, default 7). It was previously fixed at 7 days with nothing in the interface to show it.
- Mobile push notifications. Device tokens have been collected since 1.0 and nothing ever sent to them. Add your Firebase service account under Settings, Emails and members get the notifications they already receive in-app and by email on their phone as well. Off by default; a site without a mobile app needs nothing.
- Instructor withdrawals now capture where the payout should go. When an instructor requests a PayPal payout they enter the PayPal email, and the site owner sees it on the withdrawal so they know exactly where to send the money. An "arrange by email" option is available for any other method, and it stores no account details. No bank numbers are ever stored; those stay with your payment gateway.
- Members can block another member. The blocked member's comments and reviews no longer appear to them, and they can unblock anyone from a list on their account. Reporting content to a moderator was already available.
Improve
- The Analytics page now shows completion rate and average score for each course. The site owner previously saw less about their own academy than each instructor saw about their courses.
- Learnomy follows your theme's colour scheme instead of showing its own dark-mode switch on top of it. Site owners on a theme with no dark mode can turn the switch back on with the learnomy_standalone_dark_mode filter.
- Instructors can reach rubric grading from the grading queue when a quiz has a rubric. The screen existed but nothing linked to it.
Fix
- Pausing a subscription now records when it was paused, and resuming clears it. A resumed subscription used to look permanently paused to reports and exports.
- Scheduled live sessions were locked to students until the moment they began, so nobody could see the countdown or the join link. The start time is now stored separately from the drip schedule, and existing live lessons are unlocked automatically on update.
- Tax is applied to PayPal payments, not only Stripe.
- A course's price is charged in the currency set on its plan, instead of always using the site's default currency.
- Zero-decimal currencies such as Japanese Yen and Korean Won are charged the exact amount, not one hundred times too much, on both Stripe and PayPal.
- A failed subscription renewal now marks the subscription past due and begins the dunning emails on PayPal, and on Stripe for sites without Pro, matching what WooCommerce already did.
- A course a member joined through more than one route (for example free and then a membership) no longer appears twice in My Courses, and the "Courses Enrolled" total counts it once.
- Course prerequisites saved from the front-end course builder no longer lose the first prerequisite in the list.
- The editor's border, background, and stretch options for an image are now saved. They were previously discarded, so the toggle appeared to do nothing and reverted on reload.
- Certificates print correctly: the QR code no longer overlaps the signature, a long course title no longer prints through the completion date, the Modern design's signature is no longer cut off the edge of the page, and the Elegant designs now draw the border they are named for.
- Instructors no longer see the site owner's dashboard, or links to Certificates, Settings, Modules, Categories, and Earnings that answered "Sorry, you are not allowed to access this page". They now get their own dashboard, and are told plainly when an administrator has to do something for them.
- Licensing assets no longer fail to load on hosts where the document root does not match the plugin path (symlinked hosts, some managed hosts, local dev).
- Partial refunds are no longer double-counted when the payment gateway's confirmation webhook arrives after an admin refund. A 25.00 refund is recorded as 25.00, not 50.00, so revenue, access, and instructor commission stay correct.
- A sale can never be refunded past the amount charged, even if the Refund button is double-clicked or two refunds land at the same moment.
- Uninstalling Learnomy Free no longer deletes Learnomy Pro user data - the instructor's connected payout account, LTI identity, and saved notes and bookmarks are preserved.
- Mobile push notifications are delivered in the background instead of inside the payment webhook, so a member with several devices can no longer slow a checkout or cause a gateway to retry.
- Image width and alignment labels in the content editor are now translatable, and the front-end course builder's live-session fields no longer emit duplicate element ids.
- The Instructors admin page lists every instructor who teaches a course, including course authors and co-instructors. It used to show "No instructors yet" next to courses that had real instructors, because being assigned to a course did not create the instructor record the list is built from.
- Center-aligned certificate text placed near the left or right edge no longer clips off the page in the download. It stays within the certificate and wraps if needed.
- Right-aligned certificate text prints where it sits in the designer. It was placed from an estimate of the text width that drifted from the real width, more so for longer lines.
- Course-access-expiry and membership-renewal reminders are written in each member's own language, not the site's.
- With "Require login for all course content" turned on, the course grid and course catalog blocks and the XML sitemap no longer show the course list to logged-out visitors. Only the single-course pages and the REST API were covered before.
Security
- A course's title, full description, status, and price could be read by anyone, including for draft, pending, and private courses, through the Abilities REST surface. It now applies the same visibility rules as the rest of the API.
- A member's in-progress courses and completion percentages could be read by anyone. That data is now visible only to the member themselves and to staff.
Dev
- New Notification_Service::send_many() queues a large recipient fan-out (bulk enrolment, announcements) through Action Scheduler. Default async; filter learnomy_notifications_async to force inline.
- Member blocking stores a lrn_blocked_users table (database version 3.26.0) with routes POST and DELETE /users/{id}/block and GET /users/me/blocks; a blocked member is filtered from comment and review reads on every surface, and both directions are cleared on account erasure.
- wp learnomy repair student-count counts distinct people, so a course a member joined through more than one route is no longer reported as needing repair on every run.
- New shared gate \Learnomy\can_view_course( $course, $user_id ): every door that serves a course by ID applies the same two rules (unpublished is owner/admin only; private is owner/admin or enrolled).
- New lesson columns scheduled_start_at and live_duration_minutes (database version 3.18.0). A live session's start no longer shares the drip column. New filter: learnomy_live_session_duration.
- New withdrawal column destination (database version 3.19.0) holds the payout payee (the PayPal email), or stays empty for a manual arrangement. The POST /earnings/withdraw endpoint takes an optional payout_email, required when method is paypal. Readable, low-sensitivity; never a bank number.
- New single readers for values that were previously derived in several places: tax_rate(), tax_amount(), charge_currency(), subscription_grace_days(), Course::prerequisite_ids(), datetime_local_input().
- New filter learnomy_grading_row_actions on the grading queue, so an extension can add a grading route without forking the view.
- Image layout is stored on the block as { width, align } and rendered as classes on the figure. Both directions are enforced by the content round-trip gate, so a layout that cannot be read back fails the build instead of being silently erased.
- New action learnomy_webhook_deleted fires when a webhook is deleted, so an extension can clean up rows that hang off it. Learnomy Pro uses it to purge the deleted webhook's delivery log immediately instead of waiting for retention.
- Database version 3.20.0 backfills the instructor record for existing course assignments, so course authors and co-instructors appear in the Instructors list on upgrade.
Compat
- Requires Learnomy Pro 1.7.0 for the Pro modules. Install both updates together.