Every Leaky Paywall release from October through the first week of November.
Update order: Update Leaky Paywall core to 5.3.5. Core 5.3.1 needs Coupons 2.4.10 or later (2.4.11 is the latest) and, if you use Name Your Price on a recurring level, Name Your Price 1.2.3.
One setting to check: 5.3.0 removes Custom Excerpt Length, so sites using the Server method will see their teaser change. Check a restricted post after updating and adjust Lead In Elements if needed.
Leaky Paywall core
Leaky Paywall 5.3.5
- New: Leaky Paywall can now answer questions from AI assistants connected to your site through the WordPress Abilities API (WordPress 6.9 or later), such as “why can’t this reader see paid content?” and “what subscription levels do we sell?” Read-only and admin-only. Turn it on under Settings > General > AI Assistants (off by default).
- Improvement: Removed an unused Insights reports request handler and its unused scripts.
- Fix: When a reader’s browser blocks the Stripe payment form (cookie settings, a browser extension or a work network), the registration form now explains the problem instead of leaving a Next button that does nothing, and the attempt is recorded in the debug log with the likely cause.
- Fix: Reading subscribers through the Leaky Paywall REST API no longer changes their status. A subscriber whose expiration date has passed is reported with has_access false and keeps their stored status until their next visit or the daily expiration check.
Leaky Paywall 5.3.4
- New: Developers can let a logged-in reader buying another level start a separate Stripe subscription instead of switching their current one, using the leaky_paywall_stripe_switch_existing_subscription filter.
- Improvement: The registration Next button now reads “Continue to Payment”. Developers can change it with the leaky_paywall_registration_next_text filter.
- Improvement: Logged-in readers no longer see an empty Account Details heading on the registration form.
- Improvement: Quick Edit and Trash are removed from individual transaction rows, since transactions are financial records. Trash is still available as a bulk action.
- Improvement: List Builder now enforces its minimum password length on signup. Developers can change it with the lp_list_builder_min_password_length filter.
- Fix: Stripe signups no longer get stuck on “Processing” after clicking Next when the Billing Address option is turned on.
- Fix: A partial refund in Stripe no longer removes a subscriber’s access. Only a full refund ends access, and the refund is still recorded.
- Fix: A delayed trial with a setup fee now stays on trial until it converts, instead of showing as active once the fee is paid.
- Fix: Row actions, including Send Receipt, show again on the Transactions list.
Leaky Paywall 5.3.1
Note: Requires Coupons 2.4.10 or later to keep forever coupons on plan switches, and Name Your Price 1.2.3 if you use Name Your Price on a recurring level.
Read the full Leaky Paywall 5.3.1 announcement.
- Security: A Stripe signup now gets access only once its own subscription is paid.
- Security: Recurring Stripe levels are always charged the level’s own price, so editing the registration form can no longer change the amount billed. Sites using Name Your Price on a recurring level need Name Your Price 1.2.3.
- Security: The automatic tax step now only updates the Stripe customer of the signup in progress, and an unused Stripe Checkout request has been removed.
- Improvement: Logged-in subscribers can now switch plans when automatic tax is on. Their existing Stripe subscription is changed and tax is calculated on the new plan.
- Improvement: Coupons now apply to Stripe subscriptions when automatic tax is on, and the order summary shows the discounted total with tax.
- Improvement: With a Pro license, extension updates can now be installed from the Plugins page as well as from Leaky Paywall > Extensions.
- Improvement: The Search Engine Bot Bypass setting now notes that it also applies to Google AI Overviews.
- Fix: A Stripe subscriber who is refunded now stays deactivated, instead of getting access back the next time they or an admin open their account.
- Fix: A forever coupon is kept when a subscriber switches plans. Requires Leaky Paywall Coupons 2.4.10.
- Fix: Text with an apostrophe in an extension’s level settings no longer gains a backslash each time the level is saved.
Leaky Paywall 5.3.0
- New: Restriction Method setting under Leaky Paywall > Settings > Restrictions, with Automatic, JavaScript and Server options. Automatic restricts posts only paid levels can read on the server, so their full text never reaches the page source, and checks metered posts in the browser so the meter keeps working with page caching. New installs start on Automatic. Existing sites keep the method they had.
- Improvement: The teaser above the paywall is now set by Lead In Elements for every restriction method. Custom Excerpt Length has been removed, so sites using the Server method will see their teaser change. Check a restricted post after updating and adjust Lead In Elements if needed.
- Improvement: Restricted posts in RSS feeds now show the excerpt and a link to the full article instead of the full text.
- Improvement: List Builder offers the upgrade panel on posts only paid levels can read, instead of a free signup that would not unlock them.
- Improvement: The List Builder upgrade modal can now be used with the email signup turned off.
- Improvement: Checkout problems that happen in the reader’s browser, such as a declined card or a failed request, are now recorded in the Leaky Paywall debug log.
- Fix: A reader who leaves checkout at the payment step can try again right away, instead of being blocked for an hour with a message to check their inbox.
- Fix: The Stripe registration form no longer freezes on “Processing” when a request fails or times out. It shows an error and lets the reader try again.
- Fix: A reader whose signup the Stripe webhook already completed is now logged in and taken to the confirmation page, instead of being sent back to the form with an error.
- Fix: When a signup email already has an account, the message now links to the login and password reset pages.
- Fix: Registration forms on pages served from a page cache no longer fail with “There was an error” once the cached copy is old.
- Fix: A page shown in full to a search engine through Search Engine Bot Bypass is no longer cached and served to visitors.
- Fix: Readers no longer get the full article when a speed plugin such as Perfmatters delays the List Builder script.
- Fix: The in-content paywall is hidden when the List Builder modal opens over it, so readers no longer see both.
- Fix: Registration errors scroll into view once, instead of locking the page for a second per error.
- Fix: PHP 8.4 deprecation notices and the early translation loading notice in WordPress 6.7 and later.
Leaky Paywall 5.2.1
Read the full Leaky Paywall 5.2.1 announcement.
- Security: The Stripe registration form now verifies its security token on the first step, before a Stripe customer is created.
- Security: A one-time purchase is only activated when Stripe confirms a payment from that subscriber’s own customer record. A missing, failed or mismatched payment now leaves the subscriber pending until the payment arrives.
- Fix: Stripe subscription signups no longer activate before the first payment is confirmed, and subscribers whose subscription is canceled in Stripe now lose access.
- Fix: Readers with a past due subscription who resubscribe now pay for a new subscription instead of being switched onto the unpaid one, and the old subscription and its unpaid invoice are cleaned up.
- Fix: Logged in subscribers who switch plans are now charged and recorded with the correct switch amount.
- Fix: Stripe subscriptions that report as trialing are only marked as a trial in Leaky Paywall when the level has a trial.
- Fix: When WordPress refuses to create a paying subscriber’s account, the registration is kept so it can be completed later, and the site admin is emailed with the subscriber’s details.
- Fix: The welcome email, admin new subscriber email and payment receipt are now sent when a pending payment completes, instead of before it is confirmed.
- Fix: A logged in reader whose saved Stripe customer no longer exists can now check out, and a new Stripe customer is created for them.
Add-ons
Ad Dropper 2.0
Read the full Ad Dropper 2.0 announcement.
- New: Impressions are now counted in the browser, only for ads that are actually displayed, and bots are filtered out. Reports also measure viewable impressions: at least half the ad on screen for one second.
- New: Clicks on ads are counted through a secure redirect, so every click is recorded before the visitor leaves the page.
- New: Reports have date presets (today, yesterday, last 7 and 30 days, this month, last month), an option to compare with the previous period, and a breakdown by ad, zone, or device with viewability and click-through rate.
- New: Export the report table or the daily numbers to CSV.
- New: The Impressions and Clicks columns in the ads list can be sorted, and switched to show the last 30 days.
- New: Set a start and end date and time on each ad. The ad only shows between them, using the site’s timezone.
- New: Third-party tracking on each ad. Add the advertiser’s click URL, which every link in the ad goes through, and their impression tags (image, iframe or script), which fire each time the ad is shown with a fresh cache buster. Works with Google Campaign Manager 360 and other ad servers.
- New: Show an ad on all devices, desktop only, or mobile only. A desktop ad and a mobile ad can share one zone.
- New: Load Ads After Page Load setting for sites with full page caching, so ads rotate, start and end on time, and count views for every visitor. Ad zones have a new Reserve Height setting to keep space for the ad while it loads.
- New: Duplicate an ad from the ads list.
- New: Tracked ads show their Campaign Manager creative IDs, with a warning when the click and impression tags are for different creatives.
- Improvement: Today’s numbers are live instead of updating overnight, and the report chart no longer shows future dates.
- Improvement: Numbers from before this update were counted differently. The report notes this when the date range includes them.
- Improvement: Reports include ads of every post status.
- Improvement: The Ad Dropper button only shows in the editor on post edit screens.
- Improvement: Updated the license and update checker.
- Fix: The report’s ad filter keeps the selected ad after filtering.
- Fix: Removed an “Undefined array key” warning on the ad edit screen.
Authorize.net 1.3.5
- Improvement: Authorize.net decline reasons are recorded in the Leaky Paywall debug log.
- Improvement: The plugin is now translatable and includes a translation template.
- Fix: A declined card on a recurring level no longer causes a critical error at checkout. The reader now sees why the payment failed.
- Fix: The card authorization hold is released when the subscription can’t be created, so readers aren’t left with a pending charge.
- Fix: Readers see one specific payment error instead of a generic message added on top of it.
Basic Shipping 1.9.3
- Fix: Shipping fields on the registration form now use the same layout and styling as the other Leaky Paywall fields, and follow the CSS Style setting.
- Fix: Shipping field labels are now linked to their inputs.
Coupons 2.4.11
- Security: Coupon details are only saved from the coupon edit screen by users who can edit coupons, and are sanitized and escaped.
- Fix: Authorize.net recurring signups failed with an “Amount is invalid” error since 2.4.10, even without a coupon.
- Fix: Discount coupons on Authorize.net recurring levels now check the card for the discounted first payment instead of the discount amount.
- Fix: Saving a post, page or other content no longer adds coupon data to it.
Coupons 2.4.10
- Fix: A 100% off coupon now completes as a free signup on sites using Stripe Checkout, and on sites with more than one payment gateway, instead of sending the reader to a $0 Stripe page or showing an error.
- Fix: Coupons created before the coupon type setting existed are now treated as Discount coupons. With Stripe Checkout they caused the error “The minimum number of trial period days is 1”, and on the card form they gave no discount.
- Fix: An every-payment discount or delay coupon now applies when a logged-in subscriber changes levels and their existing Stripe subscription is switched, instead of charging the full price.
Double Opt In 1.5.2
- Fix: Subscribers who already have an account are no longer set back to pending, and lose access, when they upgrade or switch to a level with double opt-in enabled. Verification now applies to new signups only.
Gift Subscriptions 3.3.3
- Improvement: Gift form error messages now stay on screen for 6 seconds.
- Fix: 100% coupons on gift subscriptions now complete the gift instead of showing “Coupon code not valid”.
- Fix: Coupon discounts of $1,000 or more on gift subscriptions are now calculated correctly.
- Fix: A coupon that brings the gift total below Stripe’s minimum charge now shows a clear message.
- Fix: Changing the gift subscription level after applying a coupon now clears the coupon.
- Fix: The gift form now asks for a different recipient email when it matches the buyer’s billing email, so a gift can no longer land on the buyer’s own account.
Gift Subscriptions 3.3.2
- Improvement: The gift checkout form now matches the Leaky Paywall registration form, including section headings, labels, required field markers, inputs and the Pay button.
- Fix: The gift checkout and redemption form styling now follows the CSS Style setting. With it set to None, the Leaky Paywall styling for these forms is not loaded.
- Fix: Gift checkout form labels are now linked to their fields.
- Fix: Several admin and checkout error messages can now be translated with the Gift Subscriptions translation files.
IP Exceptions 1.6.0
- New: IPv6 support for allowed addresses, including single addresses, ranges and CIDR blocks (e.g. 2001:db8::/32).
- New: Display Message for each IP exception, shown to readers from those addresses in a slim bar at the top of every page.
- New: After saving, a notice lists any allowed-address lines that aren’t valid IP addresses or ranges.
- Improvement: Clearer instructions and labeled examples under Allowed Addresses.
- Improvement: Display messages can include links and basic formatting.
- Improvement: Updated the plugin updater.
- Fix: Only the 5 most recently added IP exceptions were applied. All active exceptions now grant access.
- Fix: Visitors on IPv6 could bypass the paywall when an active exception contained an IPv6 range.
- Fix: An exception with no addresses could pick up the previous exception’s addresses.
Invoices 1.4.0
- Security: Subscribers can only generate invoices for their own transactions.
- Security: Invoice PDFs are no longer written to the uploads folder.
- Security: Escaped output on the settings page and in invoices.
- Security: Invoice settings are verified and sanitized on save.
- New: Invoice links download the PDF in one click. Billing details can be edited per invoice.
- New: Redesigned invoice PDF with logo, status badge, itemized table and totals.
- New: Invoices show subtotal and tax, use the transaction’s currency, and show Paid, Partially refunded or Refunded status.
- New: Admins can download any invoice from the transaction screen and the Transactions list.
- New: State / Province billing field.
- Improvement: Billing details are saved with each invoice when it is first generated, so later profile changes no longer alter issued invoices.
- Improvement: Purchase History shows gifts the subscriber bought and lists all transactions (previously capped at 5).
- Improvement: Purchase History uses the site’s currency and date formats and matches the account page styling.
- Improvement: Updated the bundled TCPDF library to 6.11.4 for PHP 8 compatibility.
- Improvement: Updated the license updater.
- Fix: Gift recipients no longer see the gift purchase as their own.
- Fix: Refunds no longer offer an invoice.
- Fix: Plugin styles and scripts refresh after an update instead of loading cached copies.
MultiPass 1.2.6
- Fix: A reader with a free or expired account on a level that is not MultiPass-enabled now gets their subscription from another connected site when they log in with this site’s password. Previously they logged in but kept their old access here.
- Fix: When a reader’s subscription on another site ends, a reader who first registered a free account on this site goes back to that free account, instead of keeping the paid level.
- Fix: Readers who stay logged in now have their MultiPass subscription checked again every 12 hours, so a subscription that ends or is refunded on another site stops giving access here without waiting for them to log in again.
MultiPass 1.2.5
- Fix: Editing a MultiPass reader’s subscriber record on the receiving site no longer switches their Payment Method to Manual. The Payment Method dropdown now shows MultiPass as already selected, so saving any change keeps the reader connected to the site where they subscribed.
MultiPass 1.2.4
- Fix: Saving a MultiPass reader’s subscriber record on the receiving site no longer switches their Payment Method to Manual. MultiPass is now listed in the Payment Method dropdown.
- Fix: A reader who subscribes or renews on a different site from where they first subscribed now keeps access on every connected site. The new subscription is sent to MultiPass, and a site checks MultiPass for an active subscription elsewhere when the reader’s own subscription there has lapsed.
- Fix: A reader with a free account on one site and a paid subscription on another now gets the paid level on the other connected sites.
- Fix: A MultiPass reader’s status is no longer sent back to MultiPass from the receiving site, where it could overwrite that site’s own record for the reader.
MultiPass 1.2.3
- New: First and last names now carry over to your other MultiPass sites. A name already set on a site is never overwritten.
- New: “Match their level on the other site” option for Default Level for Incoming Users. Subscribers get the same level they hold on the other site, and it is kept up to date each time they log in.
- New: Level changes on this site are sent to MultiPass, so your other sites see a subscriber’s current level.
- Improvement: Password and email changes now carry over to your other MultiPass sites.
- Improvement: Repeated login attempts for unknown usernames are no longer sent to MultiPass, which cuts down bot traffic.
- Fix: Subscribers who already had an account on the other site could not log in there with their MultiPass password.
- Fix: A free account on this site no longer stops a MultiPass subscriber from getting their access.
- Fix: The login check no longer changes the status of this site’s own subscribers.
- Fix: Removed “Undefined property” warnings from the update checker that could appear on the Plugins screen after updating.
Name Your Price 1.2.3
Note: Required for Leaky Paywall 5.3.1.
- Improvement: Name Your Price can now be translated, and includes a translation template.
- Improvement: Updated the license and update checker.
- Fix: Readers who choose their own amount on a recurring level are now billed that amount, instead of the level’s full price. Required for Leaky Paywall 5.3.1.
- Fix: A site whose only paid offering is Name Your Price now offers free readers an upgrade.
Recaptcha 1.4.7
- Security: A free registration can no longer skip the reCAPTCHA check by sending a price with the form.
- Fix: Signups with a 100% off coupon no longer fail with “Sorry, you have failed the reCAPTCHA verification.”
- Fix: The registration form keeps its reCAPTCHA token fresh while a reader fills in their account details, so slow signups no longer fail verification.
Recurring Payments 1.6.6
- Improvement: When a card update fails for a reason other than a declined card, the error from Stripe is now recorded in the Leaky Paywall debug log even when detailed logging is off.
- Fix: On sites that take payments through Stripe Connect, readers could not update their card from the account page.
- Fix: Subscribers set to the Manual payment gateway who have a Stripe subscription can now cancel from the account page.
- Fix: Cancelling a Xendit subscription no longer shows “Unable to determine your payment method” after the cancellation succeeds.
SFS Data 1.2.1
Note: SFS Data now has its own download page.
- New: When an SFS Data transaction fails, the reason is recorded on the Leaky Paywall transaction and shown on the transaction screen, along with the exact payload that was sent, so the order can be entered into SFS by hand.
- Improvement: SFS Data error responses are now parsed into a readable message (for example “Parameter Edition’s value is invalid.”) instead of being discarded.
- Improvement: A success response that cannot be read is now treated as a failure instead of being stored as order data.
- Fix: Orders sent to SFS Data now carry the amount the reader actually paid instead of the level’s regular price. Trial, coupon, and gift coupon orders were being reported to SFS at full price.
- Fix: Renewals discounted by a forever coupon now report the discounted amount to SFS Data.
- Fix: SFS Data transactions that never reached SFS (network error, DNS failure, timeout) were not recorded anywhere. The reason is now written to the Leaky Paywall debug log.
- Fix: Corrected the renewal entry in the debug log, which read “rene wal transaction”.
Trials 1.10.0
- New: Trial Ending Reminder Email under Leaky Paywall > Settings > Emails. Sends a set number of days (default 7) before a free trial, delay or introductory discount ends, with the date, the full price and a link to cancel. Off until you turn it on.
- New: Trial Conversion card on the Leaky Paywall dashboard, showing how many trials that ended in the selected period went on to pay the full price.
- New: Trials sends Trial Started, Trial Reminder Sent, Trial Converted and Trial Ended events to Leaky Paywall Insights.
- Improvement: The registration form now shows the date the full price starts, for example “then $20 every 1 month starting November 3, 2026”, instead of “after 14 days”.
- Fix: Readers who had a trial in the past are no longer blocked from every trial level with “You have already had a trial on this site”. Only a trial that is still running blocks another one. To allow one trial per email on a level, use that level’s Limit Redemptions setting.
- Fix: Delay trials set in months now end on the same day of the month (October 20 to January 20) instead of counting 30 days a month. Existing subscriptions keep their current dates.
- Fix: Delay trial signups no longer leave an empty draft invoice on the customer in Stripe.
Trials 1.9.9
- New: Paid – Discount trials can now apply the discount to the first several payments, for example $7 a month for 3 months, then $20 a month. Set “Apply the discount to the first N payments” on the level. Works for levels billed monthly or annually.
- Improvement: The registration form and the transaction details now show how many payments the discount covers.
