- Modified template files: card-update-form.php, paypal-express-confirm.php, register-single.php, register.php, subscription.php.
- New: Add support for multiple active memberships per customer.
- New (WARNING): Authorize.net has been removed from core and moved to a separate add-on. The new add-on can be installed here: Restrict Content Pro – Authorize.net
- New: One-time discounts can now be configured on a per-discount basis rather than globally.
- New: Stripe gateway has been updated to use Stripe Elements.
- New: CSV user import tool now available in Restrict > Tools > Import.
- New: Added WP-CLI integration.
- New: Expiration and renewal notices can now be limited to certain membership levels only.
- New: Added support for bulk adding memberships to existing users from the Users table.
- New: Added "payment received" email template for admins.
- New: Use WP_List_Table for all admin table pages.
- New: Add default email template content on new installs.
- New: Log all payment events in the customer notes.
- New: Send customer name in Stripe API request.
- New: Add payment meta and membership level meta functions.
- New: Signup fees are no longer applied when manually renewing an existing membership.
- New: Stripe gateway tested with API version 2019-05-16.
- Tweak: Stop unchecking "auto renew" when a membership expires.
- Tweak: All translation files have been updated from plugin source code.
- Tweak: Updated plugin author name and URL.
- Fix: RCP datepicker styles affecting other plugin datepickers.
- Fix: Reduce the three RCP membership columns on the Users table to one single "Membership" column. This reduces database queries and improves loading time on this page.
- Fix: Payments are now only recorded via webhooks/IPNs if we can match the payment to a very specific RCP membership. This resolves issues if the same PayPal account is used for multiple different products and one customer is involved in both products.
- Modified template files: change-password.php, invoice.php.
- Fix: Pending memberships no longer expire when passing their expiration date; they just remain pending.
- Fix: Discount codes not being forced to all lowercase when being edited.
- Fix: Trial memberships not being considered "paid" when restricting content.
- Fix: $membership parameter missing from expired email filters.
- Fix: Stop using Stripe idempotency keys on discount code API requests.
- Fix: Imported memberships being incorrectly disabled after a renewal payment failure.
- Fix: Incorrect calculation in RCP_Registration::get_total() when combining both fees and credits.
- Fix: Admin notices not displaying after using bulk action in membership/customers table.
- Fix: Invoices not supporting RTL.
- Fix: Proration credit incorrectly given when upgrading / downgrading while still in the middle of a free trial.
- Fix: Hide "New Password" fields on password reset page when the reset link is invalid.
- Fix: Memberships table "Cancel" action fails due to invalid nonce.
- Fix: Stripe error when recreating customers that had previously been deleted earlier that day.
- Fix: When a discount code is used that has been restricted to certain membership levels, the membership levels restriction becomes invalidated.
Security Fix: Harden permission checks when performing membership actions.
Fix: Auto renew checkbox incorrectly appearing for lifetime memberships.
Fix: Display bug on email search dropdown when manually adding memberships/customers.
Fix: User role granted while membership is still pending.