Improvement: Add $discounts and $fees method arguments to rcp_registration_get_total filter.
Fix: Incorrect calculation in expiration date when accounting for walking dates used by PayPal. This could have caused some memberships in RCP to expire a day or two before the PayPal renewal charge went through.
Fix: Ensure we never pass a 0 user_id to our rcp_user_has_{status}_membership filters. Instead a 0 user_id is converted to the current user ID, which was the intention.
Fix: Protect against fatal errors in Memberships admin UI if you somehow have a membership record associated with a since-deleted customer / user.
Fix: Adjust parameters on email reminder query to set inclusive to true. This fixes a problem where memberships that expired at certain times may not have been included.
Fix: Use existing hidden field for registration payment ID instead of appending a new field to the form.
Fix: Braintree - do not send threeDSecure.amount parameter if 3D secure is not enabled on the account. This fixes registration issues with Braintree accounts that do not have 3D secure enabled.
Fix: Payment subtotal incorrectly set to 0 when adding a payment via Restrict > Payments > Add New.
Fix: Check for required fields in rcp_add_customer() function to prevent PHP notices when those fields are not included.
Fix: Enabling payment plans on a level that already has memberships that were created without a payment plan causes those memberships to complete the payment plan earlier than they should. With this fix, existing memberships will continue to be treated as if they do not have a payment plan at all.
- Modified template files: login.php
- New: Add limiting on failed payment reminder emails. This protects against issues we've seen where PayPal sends an excessive number of failed payment IPNs. These emails are now limited to a maximum of one email per membership per 20 hour period; and a total of 5 emails per membership. The counters reset once a successful payment has been made.
- Tweak: Update Stripe integration to use billing_cycle_anchor parameter instead of trial_end where possible. This fixes MRR reporting inconsistencies in Stripe.
- Tweak: Removed "RCP:" prefix from Stripe one-time payment description.
- Tweak: Change log in form username label to "Username or Email".
- Tweak: Update Italian translation.
- Tweak: Update Spanish translation.
- Fix: Stripe renewals have unexpected results when manually renewing an expired membership that still has a "past due" (not cancelled) subscription inside Stripe.
- Fix: Password resets not working with object caching.
- Fix: Curly quotes in Spanish translation file breaking links.
- Fix: Potential Heuristics.Phishing.Email.SpoofedDomain false positive in certain language files due to poorly formatted developer.paypal.com link.
- Fix: Incorrect query parameter in expiration reminder query arguments, which may result in some people not receiving reminder emails if their expiration time is not 23:59:59.
- Fix: Ensure all URL query arguments are URL encoded.
- Fix: Trialling users not receiving expiration reminders when they qualify.
- Fix: If "Disable Global Stripe.js" is enabled, then Stripe card update page no longer works.
- Fix: Add checks to prevent rcp_check_member_counts() cron job from running more than once per day.
- Fix: Memberships that never expire incorrectly getting picked up in rcp_check_for_expired_users() query. Note: this did not result in people incorrectly receiving expiration emails, it just meant the query was larger than it needed to be, which could have performance impacts on extremely large sites.
- Fix: Unable to save null values to database, which could impact the customer has_trialed flag value.
- Fix: Admin email notifications may contain the incorrect membership level name if multiple memberships is enabled.
- New template file: card-update-form-fields.php
- Modified template files: card-update-form.php, register-total-details.php
- New: Added support for using saved Stripe cards for new purchases.
- New: Updated the Braintree SDK, added support for the drop-in UI, and added support for 3D secure.
- New: Added support for reCAPTCHA v3. This can be enabled in Restrict → Settings → Misc by changing the version number. You will also need to generate v3 keys.
- New: When in test mode, test credit card numbers are now displayed in the registration form for supported gateways. This allows for easier and faster testing. This can optionally be disabled with this filter: add_filter( 'rcp_show_test_card_on_registration', '__return_false' );
- New: Added RCP_GATEWAY_SANDBOX_MODE constant. This allows you to force sandbox mode to always be enabled. Recommended on staging sites.
- New: The membership next renewal date is now displayed in the registration form.
- Improvement: Attempt to auto-style the Stripe Elements field, using styles on existing on-site checkout fields.
- Improvement: Our discounts database code has been rewritten to use our new custom table engine. This resulted in a number of discount classes being deprecated and new classes/functions being introduced. All changes should be fully backwards compatible.
- Improvement: Code changes that allow for payment gateways to override the card update form.
- Fix: If someone applies a one-time 100% off discount code and does not sign up with auto renew, their expiration date is incorrectly set to “never expires”.
- Fix: Always set the type attribute on all admin text input fields. This fixes a display inconsistency in WordPress 5.3+.
- Fix: Invalid HTML markup with Stripe Elements.