- Fix: Two subscriptions with the same name may result in incorrect charge/duration in Stripe.
- Fix: Content restricted to 'any' level was accessible to pending members.
- Fix: Some posts incorrectly being included in rcp_get_post_ids_assigned_to_restricted_terms(). This would only be noticed if "Hide Restricted Posts" is checked on.
- Fix: Incorrect expiration date given to member if they register, don't complete payment, then register again days later.
- Fix: Stripe Checkout spinner icon still visible after closing modal without completing payment.
- Fix: Payment form not re-appearing when removing an applied discount code.
- Tweak: Pass $event variable to hooks in Stripe gateway, like rcp_stripe_charge_succeeded and rcp_stripe_charge_failed.
- New: Add user note when recurring charge fails.
- New: Add new RCP_Member methods for set_subscription_id() and set_subscription_key().
- New: Filters for expiring soon email message and subject. Filters are: rcp_expiring_soon_email and rcp_expiring_soon_subject.
- Fix: Free trials not working properly in PayPal Express.
- Fix: Older unrestricted posts being improperly treated as restricted.
- Fix: Undefined variable in rcp_stripe_charge_failed hook.
- Fix: Payments made with Authorize.net have invalid date attached.
- Fix: Register button text not passed through rcp_registration_register_button filter.
- Tweak: Stop using deprecated functions internally.
- New: Per Stripe's recommendation, load Stripe.js on all pages if Stripe is enabled. Helps with Stripe's fraud detection.
- New: Add dynamic rcp_set_status_{$status} developer hook in RCP_Member.
- New: Email admin when a new manual payment is received.
- New: Add [is_expired] shortcode for showing content to expired members only.
- New: rcp_save_settings filter for developers to use when RCP settings are saved.
- New: Option to Always/Never show excerpts, or decide on an individual post by post basis. The new option is under Restrict > Settings > Misc.
- New: Search by first/last name on the Members list page.
- Enhancement: Add a note to a member's record when the "expiring soon" email is sent.
- New: Added the rcp_export_members_get_data_row and rcp_export_payments_get_data_row filters, making it easier to custom data to member and payment exports.
- New: Introduced a new function, rcp_is_valid_currency(), to determine if a given currency code matches the currency selected in the settings.
- New: Added action hooks to the invoice template, making it easier to programmatically add information to the invoice. New hooks are: rcp_invoice_items, rcp_invoice_items_before_total_price, rcp_invoice_additional_info, rcp_invoice_after_additional_info.
- Enhancement: Set user display name to username if first and last names are not filled out during registration.
- Fix: Member notes added programmatically not saved when editing a member in the admin.
- Fix: jQuery Migrate notice on registration form.
- Fix: Login failure if username is an email address but is different from the account's actual email address.
- Fix: Two cancellation emails sent when a member cancels.
- Fix: rcp_get_current_url() not working when used behind a reverse proxy.
- Fix: Only send the trial email when a member signs up for an old style trial plan, instead of the trial and active emails.
- Fix: Remove brackets from lost password email link, making it work better with some email apps.
- Fix: Don't load gateway webhook processing when not needed, such as during ajax, cron, and admin page views.
- Fix: Totals not showing on the registration form on mobile devices.
- Fix: Trial members not getting an activation email.
- Fix: Table layout issue with [subscription_details] shortcode.
- Fix: HTML emails have extra spacing when sent through Mandrill with the WPMandrill plugin.
- Fix: Quick/bulk editing WooCommerce products no longer wipes out restriction settings.
- Fix: Incomplete email subject line on admin notifications of free trials.
- Fix: PHP notice: undefined gateway_obj on free registrations.
- Fix: Email tags not parsed on plain text emails.
- Tweak: Deprecate the unused rcp_rstrstr() function.
- Developer: Introduced can_cancel() and cancel_payment_profile() methods in RCP_Member. rcp_can_member_cancel() and rcp_cancel_member_payment_profile() are now wrappers for these new methods.