Version 3.5.12 – September 14, 2021

  • Fix: Ensuring that the rcp admin notice can be dismissed from any admin page

Version 3.5.11 – September 14, 2021

  • Update: Adding messaging for new plan inclusions and hiding add-ons page temporarily

Version 3.5.10, July 19, 2021

  • Fix: PHP 8 Deprecations
  • Fix: Adding WordPress 5.8 block_categories_all covering custom Gutenberg category
  • Fix: Fixing the declaration of the Allowed Blocks for Content Upgrade Redirect
  • Fix: Fixing InnerBlocks Template declarations

Version 3.5.9, May 20, 2021

  • Feature: Adding new WP_CLI commands to create, update, get, list, and delete membership_levels through the command line.

Version 3.5.8, May 5, 2021

Version 3.5.7, April 9, 2021

  • Improvement: Changed build notation from PayPal.

Version 3.5.6, February 19, 2021

  • Improvement: Updating the selector for the rcp_get_registration_form_state.
  • Improvement: Removed Currency Code comparison so that global currency can be changed in the future.
  • Fix: Disabling upgrades prevented a customer from purchasing a second membership with multiple memberships enabled
  • Improvement: Add jQuery to remove special characters from discount codes in admin area, because discount codes with special characters are not valid.
  • Update: Changed build notation from PayPal.

Version 3.5.5, February 5, 2021

  • Fix: Updating the link building for front end user cancellations, to ensure that the link still functions after translation occurs.
  • Fix: Fixing additional jQuery issues that occur when the base version of jQuery is overridden to the latest version.

Version 3.5.4, February 1, 2021

  • Fix: Updating minified version of register form js for Restrict Content Pro

Version 3.5.3, January 8, 2021

  • Fix: Reworking jQuery to cover deprecations.

Version 3.5.2, December 3, 2020

  • Fix: Password Reset Form not processing usernames correctly
  • Fix: Stripe Sources lookup issue occurring when attempting to get the default source from legacy api configurations

Version 3.5.1, November 24, 2020

  • Update: Starting removal of 2Checkout from Restrict Content Pro Core
  • Improvement: Making the Stripe Webhook instructions stand out more on the settings page
  • Improvement: Adding the trailing slash to Stripe Webhook URL
  • Improvement: Remove files that are causing false positives in security scans
  • Fix: The Stripe SDK previously replaced the Error class with the Exception class, so core code was updated to match

Version 3.5, October 28, 2020

  • Feature: If Stripe auto renewal comes in late, recalculate Stripe subscription next bill date
  • Feature: Stripe allow subscription periods and durations to be updated
  • Update: Update Stripe SDK version to version 7.52.0
  • Fix: Error when updating Stripe card for cancelled Stripe subscriptions
  • Fix: Ensure that Stripe profile js is not triggered until the DOM has loaded
  • Fix: Stripe registration fails when incorrectly trying to retrieve stripe intent object from payment_intent
  • Feature: Stripe Mark payments as refunded with webhook listener
  • Update: Update Stripe Api version to latest version
  • Refactor: Remove “rcp-” from Stripe.js script handle
  • Improvement: Improve error message handling when attaching payment method to a customer
  • Fix: Replacing stripe.handleCardPayment and stripe.handleCardSetup because those functions have been deprecated.

Version 3.4.4, October 13, 2020

  • Update: Updating the minified js for includes/js/registration.js

Version 3.4.3, September 30, 2020

  • Major Change: Set session cookies instead of using wp_signon during registration. The wp_login hook will no longer fire after a user is registered.
  • Tweak: Add action to perform custom validation for Password Resets.
  • Tweak: Add filter to conditionally disable login hijacking.
  • Tweak: Add API to allow for asynchronous Promise-based registration validation.
  • Refactor: Remove old updater API calls.
  • Log: Adding License Logging

Version 3.4.2, September 30, 2020

  • Fix: French Translation update
  • Fix: Spanish Translation update
  • Fix: Membership Levels fix for both sorting the levels and the number that can be displayed.
  • Update: Removing old License key field, label, and notification.
  • Fix: Braintree and Stripe had dates being formatted with the incorrect format.
  • Fix: RCP settings page was not defaulting to the selected tab after saving form.

Version 3.4, September 8, 2020

  • Fix: WooCommerce Products can be incorrectly restricted if a user hasn’t verified their email address.
  • New: Added new actions hooks to Membership page before and after payments table. ‘rcp_membership_details_before_payments’ and ‘rcp_membership_details_after_payments’
  • Fix: Able to save invalid configuration with 0 duration and payment plan.
  • New: Introduced action hook that runs after membership is updated via admin. ‘rpc_after_membership_admin_update’
  • New: Created new filter on price for RCP Group Accounts User Specified Count Quantity
  • Fix: Removed ‘ba-bbq’ library to fix Javascript error in WordPress 5.5
  • Fix: Some columns were missing from Membership Levels after updating from 2.x to 3.4.
  • Improvement: Update to Danish Translation.
  • Fix: Polish Currency Code formatting
  • Fix: Bulk actions don’t work when using non-English languages.
  • Improvement: Option to apply discounts to signup fees
  • Improvement: Move Membership Level to BerlinDB
  • Fix: Incorrect expiration date when renewing an existing membership.
  • Improvement: Update to French Translation
  • Improvement: Update some BerlinDB bas classes
  • New: Add ability to toggle auto renew off/on [Stripe]
  • Improvement: Add ability to export all members at once.
  • Fix: Unable to save backslashes in the databases
  • New: Logs Table
  • New: Add payments importer tool
  • Improvement: Stop using ‘000-00-00 00:00:00’ as default date values
  • Improvement: Add database table version numbers to system info file
  • New: Add Component Registry
  • Fix: CSS was removed in order to remove the breaking style from admin pages.
  • Fix: use “jQuery” instead of “$”.
  • Improvement: %member_id% template tag description change
  • Improvement: Capitalize first letter in card brand on the update card form page.
  • Improvement: [rcp_update_card] shortcode did not work with editing multiple memberships.

Version 3.3.13, September 1, 2020

  • New: Added new updater.

Version 3.3.12, June 22, 2020

  • Security Fix: Improve customer IP address validation & escaping.
  • Fix: Include $membership argument in renewal payment failed email filters. This fixes some problems with Per-Level Emails not working with this email template.

Version 3.3.11, May 4, 2020

  • Fix: reCAPTCHA now works with [register_form_stripe]. This also fixed a problem where the [register_form_stripe] form wasn’t able to be submitted at all if reCAPTCHA was enabled.
  • Fix: Two strings missing the rcp text domain, which prevented them from being translated.
  • Fix: Adjust how base object class is set up to prevent unnecessary unserializing.
  • Fix: Add whitelists to queries in RCP_Levels database class to prevent ordering by columns that don’t exist.
  • Translations: All translation files have been synced with the source code. This will add any missing strings.

Version 3.3.10, April 6, 2020

  • Fix: Memberships still shown as trialing if a customer renews their membership before the trial expires. Now the trialling flag is removed as soon as the first payment comes in, even if it’s done early.
  • Fix: Braintree class fatal error when using RCP’s Braintree gateway alongside other plugins using the same Braintree library.
  • Fix: The administrator user role is now never removed, even if the administrator role was granted by the membership level.
  • Tweak: Added version number to composer.json file.

Version 3.3.9, March 23, 2020

  • Modified template files: subscription.php
  • New: Add filters on admin Payment Received email message and subject. rcp_payment_received_admin_email and rcp_email_payment_received_admin_subject.
  • New: Add user_id column to memberships table. This helps provide a more direct connection between a membership record and the corresponding user account. This data will be automatically backfilled when accessed.
  • New: Add get_payment_id() public method to RCP_Emails class.
  • Improvement: Add JavaScript confirmation to “Cancel” link on admin memberships table.
  • Improvement: Automatically retry failed payment after Stripe billing card is updated.
  • Improvement: Add more detail to “can cancel” debug log message to explain why it might be “false”.
  • Improvement: Include all method parameters in rcp_registration_get_recurring_total filter.
  • Improvement: Rework handling in 3.0 migration for people who attempt the migration multiple times. This helps better ensure all migrated data is brand new and not “stale” from the previous attempt.
  • Improvement: Adjust membership level “Status” description to clarify the difference between active and inactive membership levels.
  • Improvement: Introduce rcp_transition_customer_email_verification hook. This hook is now used for triggering email verification emails.
  • Improvement: Add $payment_event parameter to rcp_stripe_webhook_membership filter.
  • Improvement: subscription.php template – Give upgrade link a new class (rcp_sub_details_change_membership) so it’s not the same as the renew link.
  • Fix: “Complete Payment” feature not working – form gets stuck on “Please Wait…”
  • Fix: RCP duplicating Google Authenticator plugin’s admin settings.
  • Fix: Invalid integer error while processing failed payment emails.
  • Fix: Ensure RCP’s new membership expiration date is always at least 2 hours after Stripe’s reported current_period_end on automatic renewals. This allows time for Stripe’s 1-hour window between invoice generation and payment.
  • Fix: Rework old discounts database table upgrades from the 3.0.0 update to ensure they all run correctly and in order. This protects against a possible error about the subscription_id column not existing.
  • Fix: Unable to update Stripe billing card if the subscription wasn’t originally created by RCP.
  • Fix: CSV importer reporting incorrect row numbers after the first batch.

Version 3.3.8, February 12, 2020

  • Fix: PHP 5.6 error due to use of type hinting.
  • Fix: Check if wp_is_site_initialized() exists before using to prevent errors in WordPress versions below 5.1.

Version 3.3.7, February 11, 2020

  • New: Introduced new filter rcp_is_rcp_admin_page. RCP scripts and styles are enqueued when this returns true so third party plugins can use this filter to load RCP scripts and styles on their own pages.
  • Improvement: $_POST data is now available during rcp_validate_registration_state ajax action.
  • Fix: MySQL errors on multisite when switch_blog action runs for the first time after new sites are created but before the database tables are created.
  • Fix: If a customers database table upgrade runs a second time it throws an error.
  • Fix: Improve logic on Stripe subscription creation dates to better protect against failures with non-standard billing cycles.
  • Fix: Add checks in case the one_time column is missing from the discounts database table, and add it in if so. This error could occur when upgrading from a very old version.

Version 3.3.6, January 30, 2020

  • Fix: Subscription creation failed with monthly memberships if next month has fewer days than this month.

Version 3.3.5, January 29, 2020

  • New: Added rcp_registration_page_url filter.
  • Improvement: Customers can now update their Stripe cards if they do not have a recurring membership. Note: if a non-recurring customer does this, updating their billing card does not actually create a recurring subscription.
  • Fix: rcp_is_active() can incorrectly return false when multiple memberships are enabled and the user has one membership that is not active, but another one that is.
  • Fix: Correct plugin header to use Plugin URI instead of Plugin URL.
  • Fix: Date calculation error with “walking expiration dates”. This caused incorrect dates being calculated for yearly memberships that began on the 29th, 30th, or 31st of any month.
  • Fix: Membership counts cron job not running due to incorrect query argument.
  • Fix: reCAPTCHA v3 could fail if the registration form was submitted multiple times by the same user. (Example: first attempt their card payment failed, so they tried again within the same page load.)
  • Fix: Adjust how RCP matches Stripe webhook to a membership to ensure that RCP doesn’t process webhooks for any plugins.
  • Tweak: Add membership note whenever a membership is manually edited.

Version 3.3.4, January 23, 2020

  • Improvement: Update Stripe and Braintree gateways to “soft fail” after all essential actions have been taken. For example: if initial payment is successful but setting up the subscription fails, then registration is still deemed “successful” (whereas previously it would have been marked as a failure). In this case, membership is still activated but auto renew is disabled and a note is added to indicate the subscription creation failure.
  • Improvement: Add help next next to email reminders to clarify the difference between Expiration & Renewal reminders.
  • Fix: Convert stripe_checkout gateway to stripe in membership records.
  • Fix: RCP_Membership::enable() not enabling the membership. This caused a problem where memberships were not getting assigned when someone attempted to register, had their card declined, then tried again successfully.

Version 3.3.3, January 15, 2020

  • 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.

Version 3.3.2, January 8, 2020

  • 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 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.

Version 3.3.1, December 16, 2019

  • New: Added new email template tags for %membership_renew_url% and %membership_change_url%.
  • New: Add a date filter to the admin Payments page.
  • Improvement: Added new membership column for activated_date. This gets set when a membership is activated.
  • Improvement: Updated Spanish translation.
  • Improvement: On install, the default pages are now assigned to the currently logged in user.
  • Improvement: Reject discount code if it’s one-time and attempted to be applied to a free trial. Previously, the discount was still not applied, but the user was not actually informed of this. Now we show a clear error message informing the user that the discount didn’t work.
  • Improvement: Adjust one-time discounts setting to clarify it doesn’t work with free trials.
  • Improvement: Change “Upgraded From” label on Membership Details to “Changed From”.
  • Improvement: Add subscription key to admin Membership Details page.
  • Improvement: Move rcp_process_member_cancellation hook down a couple lines to ensure our note gets added prior to that hook running.
  • Fix: Stripe modal not working in IE11.
  • Fix: Inelegant Stripe error when no cardholder name is supplied while updating billing card. We now show a nicer looking error if the field is empty.
  • Fix: test_calculate_expiration() unit test failing due to setting expiration date to one in the past.
  • Fix: Admin unable to manually change a membership’s level if the other levels are deactivated.
  • Fix: Unable to manually renew a free trial level prior to its expiration.
  • Fix: Database table version numbers were not being removed from wp_options on uninstall.
  • Fix: “Hide Premium Posts” query modification was overriding existing post__not_in value. Now they get merged.
  • Fix: Under certain circumstances, admin payments table was incorrectly showing “User #123 (deleted)” as the customer name when the user hadn’t actually been deleted.

Version 3.3, December 10, 2019

  • 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.

Version 3.2.3, October 7, 2019

  • Modified templates: subscription.php
  • New: Added the ability to recover pending and failed payments. A “Complete Payment” link has been added to the list of payments on the [subscription_details] shortcode.
  • Tweak: Added terms/privacy checkboxes to [register_form_stripe] shortcode if enabled. This also fixed an issue where the shortcode was validating for these checkboxes but not displaying them.
  • Tweak: CSV Importer: improve CSV mime type detection.
  • Tweak: CSV Importer: if incorrect file type is detected, include the detected file type in the error message.
  • Tweak: Localize Stripe error messages that occur via JavaScript. Also add a new filter rcp_stripe_error_messages to allow these error messages to be modified.
  • Tweak: Include original Stripe error message if we don’t have our own localized version.
  • Tweak: Show admin notice if manual membership cancellation fails.
  • Fix: Sign up fees not being applied if someone attempts a payment, doesn’t complete it, then tries a second time. This typically only occurred with the PayPal gateway, which allows you to not complete a payment in progress.
  • Fix: Heuristics.Phishing.Email.SpoofedDomain false positive from virus scanners, due to us making a link to, which actually led to our documentation on how to use that site to get API credentials.
  • Fix: Add missing try/catch block during certain Stripe operations.
  • Fix: Correct formatting on sprintf() functions.
  • Fix: Undefined property errors while updating pending payments via cron job.
  • Fix: Under certain circumstances, RCP was incorrectly creating a second Stripe customer record.
  • Fix: Stripe webhook conflicts when RCP is installed on two separate sites but both use the same Stripe account.
  • Fix: Remove admin_url() base from rcp_get_invoice_url() function. In certain edge cases this was resulting in admin_url() being included in email notifications.
  • Fix: Update WP_User display name when editing Customer first/last name via Customer Details page.
  • Fix: Email verification link not working when using plain text emails.
  • Fix: CSV Importer – use email as the username if username is omitted from the CSV file.
  • Fix: Recurring fees not being properly passed to payment gateway during registration.
  • Fix: Do not apply prorated credits when multiple memberships are enabled and registering via [register_form_stripe].
  • Fix: “Renews automatically” incorrectly displaying on [subscription_details] shortcode for inactive memberships.
  • Fix: rcp_get_user_payments() was returning all user payments if the current user was logged out. It now returns an empty array.
  • Fix: Display issues on admin payments table on mobile devices.

Version 3.2.2, September 17, 2019

  • Improvement: Updated French translation.
  • Improvement: Display clearer error messages when there’s a problem adding a discount code.
  • Fix: Registration type changing mid-registration, which could impact signup fees with some gateways.
  • Fix: Stripe invalid request error when someone with a non-recurring Stripe membership visits the page containing the [rcp_update_card] shortcode.
  • Fix: Incorrect use of date_i18n() instead of date() when saving payment dates via webhooks.
  • Fix: Filter the password reset URL to use the designated RCP login form when “Redirect Default Login URL” is enabled.

Version 3.2.1, September 12, 2019

  • Fix: Incorrect Stripe subscription start date if a member manually renews a membership prior to expiration and the initial payment hasn’t yet been fully captured at the time the subscription is created.
  • Fix: Unable to process free membership if Stripe is the selected payment gateway.
  • Fix: Registration errors when a customer has a membership for a level that has been deleted.
  • Fix: Missing rcp_stripe_signup_payment_failed action when initial Stripe payment fails.
  • Tweak: Update rcp_is_trialing() function to remove use of deprecated class.
  • Tweak: Include RCP upgrade date and “upgraded from” version in system info report.

Version 3.2, September 10, 2019

  • Important: Stripe Checkout gateway has been removed. If you’re using it, you will automatically be changed over to our normal Stripe gateway, which uses Stripe Elements. The [register_form_stripe] shortcode still functions, but it may look different.
  • New: Updated the Stripe gateway to use Payment Intents API. This complies with SCA regulations.
  • New: Stripe card declined notices now appear inline and no longer require a page refresh.
  • New: Added %update_billing_card_url% template tag, which serves as a direct link to the “update billing card” page for the membership associated with the user’s most recent payment. Recommended for use in the Renewal Payment Failed email.
  • Tweak: Changes to registration form JavaScript. Initial membership processing is now handled via ajax. Testing is recommended if you have custom code that interacts with the registration JavaScript.
  • Tweak: The first payment in a Stripe subscription is now always a one-time charge. The subscription is created with a delayed start date (until the next billing cycle).
  • Tweak: Stripe gateway no longer uses Stripe Coupon codes. Instead, new plans are created for each duration/amount combination.
  • Tweak: Stripe gateway no longer handles signup fees via customer account balance. They are incorporated into an initial one-time charge that handles the first payment.
  • Tweak: The rcp_stripe_charge_create_args filter is now deprecated and replaced with rcp_stripe_create_payment_intent_args. This is due to replacing the Charges API with the Payment Intents API. Some arguments may now differ.
  • Tweak: Stripe error messages are now able to be translated.
  • Fix: Stripe gateway doesn’t use the “recurring_price” that’s passed into the gateway class.
  • Fix: Stripe incorrectly applying one-time discounts after a free trial.

Version 3.1.2, August 22, 2019

  • New: An admin notice will be displayed if you have the Stripe Checkout gateway enabled, explaining that the gateway will be removed in RCP version 3.2 due to SCA regulations. Read more here:
  • New: Added a date_completed column to the wp_rcp_queue table.
  • New: Unauthorized users are now redirected away from category archive pages if the category is restricted. (Requires that Hide Restricted Posts be checked on.)
  • New: Allow filtering by both level and status on Restrict > Memberships page. Note: you must choose a status filter first, then you can change the membership level.
  • New: Add support for a redirect query arg when generating a resend_verification link.
  • New: Add “Status” dropdown to the “add payment” form on the admin Membership Details page.
  • Tweak: Moved _rcp_reminder_sent_* user meta to membership meta.
  • Tweak: Adjust Redirect Default Login URL setting description to convey that the [login_form] shortcode is required on the page and not optional.
  • Fix: Free trial incorrectly granted again under certain circumstances.
  • Fix: If a customer signs up for a one-time payment membership and does not complete payment, they are unable to try again. (Usually only seen with the PayPal payment gateway.)
  • Fix: CSV import not setting correct password for new users.
  • Fix: CSV import missing old rcp_user_import_user_added action hook.
  • Fix: Incorrect ajax parameter used for error message when uploading a CSV import file fails.
  • Fix: Don’t show an error message on [rcp_update_card] shortcode if the current user does not have a membership at all.
  • Fix: Ensure that free membership status is always converted to active (backwards compatibility with pre-3.0).

Version 3.1.1, July 31, 2019

  • New: Add message to [rcp_update_card] shortcode when a user is unable to update their card details.
  • New: Add action rcp_edit_customer_after_memberships_section to Customer Details page, allowing third party plugins to add a whole new customer section.
  • New: On Customer Details page, display whether or not the customer has trialled before.
  • Tweak: Add a space between the Norwegian Krone currency symbol and the price (previous: 10kr new: 10 kr).
  • Tweak: Removed the 2-day grace period on the expiration cron job. Use this custom code if you want to add it back in:
  • Tweak: Include RCP payment ID in Stripe one-time charge metadata.
  • Fix: Generate a new subscription key on renewals if existing one is blank. This fixes a problem with renewals not activating via PayPal if the existing membership didn’t have a subscription key (which might be the case if the membership was imported).
  • Fix: EDD Downloads not showing excerpts to users without access if excerpts are globally enabled.
  • Fix: Under certain circumstances, deactivated membership levels can be renewed when they shouldn’t be able to. If you want to allow deactivated levels to be renewed, use the rcp_can_renew_deactivated_membership_levels filter. Example:
  • Fix: Expiration emails being sent when creating a new membership with the “expired” status.
  • Fix: reCAPTCHA errors when using [register_form_stripe].
  • Fix: Registration not working in Internet Explorer due to JavaScript assign() error.
  • Fix: Stop using date_i18n() in database datetime validation.
  • Fix: Pending payment ID can be incorrect if someone attempts a payment multiple times for the same membership.
  • Fix: 3.0 migration – check for and show clear error if the user being migrated doesn’t exist (due to orphaned user meta).

Version 3.1, July 17, 2019

  • 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): has been removed from core and moved to a separate add-on. The new add-on can be installed here:
  • 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.

Version 3.0.10, June 20, 2019

  • 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.

Version 3.0.9, May 20, 2019

  • 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.

Version 3.0.8, May 9, 2019

  • New: Add clear membership notes explaining where a cancellation originated from (customer action vs admin action vs webhook).
  • New: Add get_user_id() method to RCP_Emails class.
  • New: Add $membership parameter to “rcp_subscription_details_action_links” action.
  • Tweak: Adjust logic in cron job that expires memberships, which will now allow the 2-day grace period to be removed with custom code.
  • Fix: rcp_get_term_restrictions() – Can return an array with “access_level” => “None”, which breaks restriction functionality.
  • Fix: Registration form not able to be submitted after completing CAPTCHA.

Version 3.0.7, May 7, 2019

  • Fix: Membership level not loading correctly in registration form when using the `id` attribute.
  • Fix: 3.0 migration – force old expiration date to all lowercase to prevent errors with unexpected capitalization on “none” value.

Version 3.0.6, May 6, 2019

  • New: Add option to disable loading Stripe Javascript when not needed.
  • New: Add helper functions for checking WooCommerce purchase/viewing permissions.
  • New: Introduce new function: rcp_has_term_restrictions(). This should also improve loading time as it reduces the usage of the more intensive function rcp_get_post_ids_assigned_to_restricted_terms().
  • Tweak: Reintroduce rcp_user_has_access() helper function for checking access level.
  • Tweak: Force debug logging off during 3.0 migration. This makes it go much faster.
  • Tweak: Rename stripe.js handle to avoid JS conflicts. It’s now called “rcp-stripe-js-v2”.
  • Tweak: Remove the current membership level from RCP_Membership->get_upgrade_paths(). This creates better separation between can_renew() and upgrade_possible(). This adjustment also fixed the following issues:
    1. If upgrades are disabled, non-recurring memberships can’t be renewed early.
    2. Don’t show “upgrade or change membership” link when there’s only one membership level on the site.
    3. Improve registration form UI when you’re signed up to a free membership level and it’s the only level available on the site.
  • Fix: Registration errors when the total amount due today is $0 due to one-time 100% off discounts, negative signup fees, or prorated credits. Note: this required massive changes to our register.js file so if you use any of our JavaScript functions/triggers we recommend testing on a staging site before upgrading your live site.
  • Fix: PayPal Standard – incorrectly triggering “rcp_webhook_recurring_payment_processed” hook on initial payment.
  • Fix: When an admin changes a membership’s level, the user role is lost if the role is the same for both the old level and the new one.
  • Fix: Customer / membership search not working on emails with + symbols.
  • Fix: Don’t show update billing card form for PayPal Standard / Express signups. Cards cannot actually be updated via RCP for those gateways; they need to be updated inside PayPal directly.
  • Fix: If someone signs up for a lifetime membership via PayPal, doesn’t complete payment, they’re unable to try again.
  • Fix: If a membership is in the trial period, then gets cancelled, the customer cannot renew the membership again until it expires.

Version 3.0.5, April 16, 2019

  • Modified template files: paypal-express-confirm.php
  • New: Allow “Payment Method” to be modified on Edit membership screen.
  • New: Add Idempotency Keys to Stripe POST Requests.
  • New: Introduce new customer / membership helper functions.
  • New: Add email auto search when adding a new membership / customer.
  • New: Add “rcp_add_membership_after” hook to Add Membership page.
  • Tweak: Reorder and rename email templates to provide better clarity.
  • Tweak: Update membership “recurring_amount” value on automatic renewals.
  • Fix: rcp_get_customer_gateway_id() not working correctly for Stripe Checkout.
  • Fix: Incorrect payment gateway slug being used for “PayPal Express” payments.
  • Fix: Add additional checks to ensure members get the correct user role when their membership is activated.
  • Fix: rcp_get_membership_by() returning disabled membership records when it shouldn’t be.
  • Fix: Expired users cron job query not locating all relevant memberships.
  • Fix: Initial payment being recorded twice.
  • Fix: Incorrect subscription link URL for live subscriptions.
  • Fix: “subtotal” payment column not being set for automatic renewals.
  • Fix: Check if membership ID is set for payments before attempting to complete a registration. This caused problems when inserting payments via the REST API.
  • Fix: JavaScript errors when adding a custom currency without specific name formatting.
  • Fix: Registration not failing gracefully if customer record fails to be created.
  • Fix: Incorrect setting description for “maximum number of simultaneous connections per member”.
  • Fix: 3.0 migration – incorrect user query on multisite installation when RCP is not network activated.
  • Fix: 3.0 migration – skip membership import if membership level cannot be retrieved. This would occur if someone had a membership for a level that has since been deleted.
  • Fix: Delete “rcp_pending_payment_id” meta value on registration failure.
  • Fix: Undefined index notices on PayPal IPN when certain events come through.
  • Fix: Credits not displayed on PayPal Express confirmation page.

Version 3.0.4, March 22, 2019

  • Modified template files: card-update-form.php, change-password.php, login.php, lostpassword.php, paypal-express-confirm.php, profile-editor.php, register-single.php, register.php,
  • New: Add new “transaction_type” column to payments table to differentiate between renewals, upgrades, downgrades, and new registrations.
  • New: Gateway Subscription/Customer IDs now link to relevant pages in payment gateway.
  • New: Add gateway column to admin payments table.
  • New: Add generic “rcp-button” class to all buttons in templates.
  • New: Add “rcp_stripe_existing_plan_id” filter to Stripe plan ID when checking if a plan exists.
  • Tweak: Update Stripe PHP library.
  • Tweak: Prefix plugin name with “WordPress” in Stripe setAppInfo calls.
  • Tweak: Include Stripe partner ID in setAppInfo calls.
  • Tweak: Add extra checks to ensure cancellation emails do not get sent on upgrades/downgrades.
  • Tweak: Braintree: search for existing customer by ID when processing a payment.
  • Tweak: When calculating prorate credit amount, apply filter to $0 return values.
  • Tweak: Adjust description on “Membership Level” setting for discount codes.
  • Fix: Expiration date not extended if a user has 0 historical payments while manually renewing their membership before the expiration date. (This may have affected imported users renewing for the first time.)
  • Fix: Certain circumstances may cause PayPal Express to charge an incorrect amount on manual renewals, if the first payment was discounted for other reasons.
  • Fix: Plugin upgrade process not running if manually upgrading the plugin in a way that involves reactivating the plugin.
  • Fix: Improve WP_User_Query backwards compatibility when checking “rcp_status” meta key/value.
  • Fix: Deprecated rcp_get_member_cancel_url() function returning wrong membership ID.
  • Fix: Memberships admin table bulk actions not working.
  • Fix: Stripe Checkout transaction IDs not linked in admin.
  • Fix: Credits incorrectly being added to payment record during renewals.
  • Fix: Restricting by role through the meta box doesn’t work if the user doesn’t also have a membership.
  • Fix: PayPal Standard amount verification causes IPN to fail if there’s a record mismatch. This would only happen if you’d edited a membership level price at some point.
  • Fix: User role sometimes not being added on membership activation.
  • Fix: No longer require object_id when adding a new membership. This fixes some issues with backwards compatibility when using update_user_meta() with old values.

Version 3.0.3, March 7, 2019

  • Modified template files: card-form-full.php
  • New: Add a button to change the membership level when editing a membership.
  • New: Add support for screen options on Customers and Memberships pages.
  • New: Add note to customer profile when the customer upgrades or downgrades their membership.
  • Tweak: Updated country list on registration form.
  • Tweak: Added note in rcp_create_tables() PHPDocs about how to create new database tables in 3.0.
  • Tweak: The “Restrict” menu item is no longer translated to Norwegian.
  • Tweak: Add note when creating a discount code if no membership levels have been created yet.
  • Fix: Plugin activation error when Yoast is also activated.
  • Fix: “View all payments” link on Edit Customer page incorrectly showing payments by all customers.
  • Fix: Email verification link not rendering in emails.
  • Fix: User ID number not being stored with PayPal payments.
  • Fix: Update regex for Stripe plan names.
  • Fix: If the Renewal Payment Failed admin email template is disabled, the checkbox cannot be unchecked.
  • Fix: Fatal error when searching on customer/membership pages and the search yields 0 results.
  • Fix: PHP warning in rcp_has_post_restrictions() when post is restricted to multiple user roles.
  • Fix: Unable to cancel PayPal Express memberships.
  • Fix: Fatal error when using WordPress core’s “retrieve_password_title” filter.
  • Fix: Passwords were incorrectly sanitized when creating new users, potentially resulting in a different password being saved.
  • Fix: Undefined index REQUEST_METHOD when running certain CLI commands.
  • Fix: PayPal IPN verification was being performed even if it was disabled.

Version 3.0.2, March 4, 2019

  • New: Added error logging to batch processor.
  • New: Membership counts on membership levels table are now clickable and link to the memberships page filtered by level.
  • New: Allow Stripe Connect notice to be dismissed.
  • Tweak: Updated French translation.
  • Tweak: Expand “Username already taken” error message to provide more clarity.
  • Fix: Default user role not being removed when custom role is added. This could result in a member having two roles.
  • Fix: PHP notice when submitting the log in form with a username that doesn’t exist.
  • Fix: Users who were pending email verification were incorrectly allowed to view restricted WooCommerce products.
  • Fix: Membership level name not being added to Stripe Checkout modal under certain circumstances.
  • Fix: “Items” count on memberships table not updating when filtering.
  • Fix: Admins unable to view restricted content if they do not have a membership.
  • Fix: Check payment_status in PayPal IPN when processing renewals.
  • Fix: Fatal error on WooCommerce archive when using taxonomy restrictions and the current users not have a membership.
  • Fix: Upgrades not activating correctly when using PayPal Standard.
  • Fix: Incorrect wording in “Update Billing Card Page” setting description.
  • Fix: Excerpts in EDD

    This add-on for Restrict Content Pro creates a seamless connection with your BuddyPress installation. Show user account details in the user’s BuddyPress profile, assign BuddyPress Member Types to individual subscription levels, restrict content by Group membership, and more! Account Details Now, you can show subscription details and payment history in the user’s BuddyPress profile settings page. A new tab is added to…

    One of the worst parts of eCommerce is dealing with taxes. Tax rules are difficult to understand and vary from location to location. Not only that, but tax rules are regularly modified and what may have been compliant today may cost you a ton in unpaid taxes tomorrow. That is why we have partnered with Avalara to…

    Our Ultimate Member add-on for Restrict Content Pro (RCP) seamlessly integrates RCP’s powerful subscriptions functionality with the advanced member management provided by Ultimate Member. This integration creates a tab in the Ultimate Member member account page where the member can manage their payment and subscription settings. This integration will also track the members status, so…

    The Restrict Content Pro – Resume Manager add-on grants you membership level control over WP Job Manager’s Resume Manager add-on. Determine which membership levels should be allowed to view resumes, submit them, and how many can be submitted per month. Our Restrict Content Pro – Resume Manager add-on also allows you to disable all public…

    Allow guests to view a limited amount of restricted content with our View Limit plugin. Set the number of unique pages, posts, or custom posts someone is allowed to view before they are required to upgrade or purchase. The view count will reset after the number of days specified is reached. Use Restrict Content Pro,…

    Configure different activation, expiration, and cancellation emails for each membership level.

    Process credit card payments through the payment gateway.

    Keep content unrestricted until a specified date in the future, at which point it will become restricted automatically.

    Limit the number of times subscription levels may be purchased.

    shortcode incorrectly restricted.
  • Fix: Undefined index error on fresh installs on settings and system info pages.

Version 3.0.1, February 28, 2019

  • Fix: Automatic update notices not appearing in admin dashboard.

Version 3.0, February 27, 2019

  • Warning: Version 3.0 requires PHP version 5.6 or higher. Please do not upgrade unless you meet these requirements.
  • Modified template files: card-update-form.php, invoice.php, paypal-express-confirm.php, register.php, register-single.php, register-total-details.php, subscription.php, woocommerce-single-no-access.php
  • New: Membership data has been migrated to custom tables. This sets the foundation for supporting multiple memberships per user in the future. You will be prompted to migrate your data after upgrading.
  • New: Added a batch processing API.
  • New: Added support for payment plans.
  • New: You can now restrict content to multiple user roles through the “restrict this content” meta box.
  • New: You can now restrict content to custom user roles when using the [restrict] shortcode.
  • New: Memberships can now be sorted by expiration date.
  • New: The “Auto Add Users to Level” setting has been added to the system info file.
  • New: The PayPal Express confirmation screen has been updated to include additional information, including discounts, fees, and credits.
  • New: object_id is now supported in RCP_Payments::count().
  • New: Original join dates are now stored (in the wp_rcp_customers table).
  • New: “Prevent Account Sharing” setting now accepts a maximum number of simultaneous connections.
  • New: When a user account is deleted, associated recurring subscriptions are now automatically cancelled.
  • Tweak: “Subscription Levels” have been renamed to “Membership Levels”.
  • Tweak: “Free Content Message” and “Paid Content Message” have been merged into one single “Restricted Content Message” setting.
  • Tweak: The Stripe API library has been updated.
  • Tweak: The “Email IPN Report” feature has been removed.
  • Tweak: Our login functions now use wp_signon(). This allows greater support for third party plugins that integrate with the login system, such as Jetpack Protect.
  • Tweak: The invoice template has been expanded to include fees, discounts, and credits that were applied to that payment.
  • Tweak: The login link text in the registration template has been adjusted.
  • Tweak: Improved error messaging when adding/updating membership levels fails.
  • Fix: Password reset links will now work with SendGrid click tracking.
  • Fix: RCP user meta is now removed during uninstall.
  • Fix: The payment_id column name in the wp_rcp_payment_meta table has been renamed to rcp_payment_id. This fixes a conflict with the Give plugin.
  • Fix: The admin bar is no longer hidden for users who have the “edit_posts” capability.
  • Fix: Under certain circumstances it was possible for rcp_get_ip() to return a CSV of IP addresses instead of a single IP.
  • Fix: Databases are now registered when switching sites on multisite.
  • Fix: Fixed a DateTime::__construct() fatal error in when signing up for a free trial.
  • Fix: In the wp_rcp_payments table, the following column types have been updated: id (now unsigned), object_id (now unsigned), user_id (changed from mediumint to bigint(20) and now unsigned).

Version 2.9.15, December 19, 2018

  • New: An admin notice is displayed on sites running PHP versions lower than 5.6. Restrict Content Pro version 3.0 will raise its PHP version requirement to 5.6 or higher, so if you’re using an older version make sure you upgrade that before RCP 3.0!

Version 2.9.14, August 27, 2018

  • New: Introduce “RCP_DISABLE_EMAILS” constant. When set, RCP will not send out any emails. Great for using on staging/development sites.
  • New: Added filter “rcp_email_payment_received_subject” on “Payment Received” email subject.
  • New: Added action “rcp_membership_level_row_actions” in subscription level row actions.
  • New: Added “Date Generated” to system info file.
  • New: Allow passing in date start/end in RCP_Payments::get_earnings().
  • Tweak: Updated Spanish translation.
  • Tweak: Updated Norwegian translation.
  • Tweak: Get current user ID as fallback in rcp_get_return_url() if no user ID is provided.
  • Tweak: Change composer/installers version requirement tilde to caret.
  • Fix: Outdated certificate in SDK causing connection failures.
  • Fix: Counts in Restrict > Members sometimes incorrect when searching for a member.
  • Fix: SQL syntax error in RCP_Levels::get_levels() limit clause.
  • Fix: Prevent redirect loop when using “Hide Restricted Posts” feature and the redirect page is restricted.
  • Fix: Content excerpt length was being set to 50, but then filtered to 100. The filter has been removed and the default is now set to 100, to avoid any actual changes.
  • Fix: Unable to set list_order value in RCP_Levels::insert().
  • Fix: Member incorrectly gets “cancelled” status when moving from paid level to old style free trial. This does not affect free trials that have been integrated into a paid subscription level via the “Trial Duration” field.
  • Fix: Only block access to content via REST API if user can’t access it.

Version 2.9.13, May 24, 2018

  • New: Added options to show Terms of Service and Privacy Policy checkboxes on the registration form. This lets you require your members agree to these terms before registering. The time and date someone agreed to the terms is shown on the member’s edit screen in the WordPress admin.
  • New: Added new filters so developers can customize the email subject and message body for emails that are sent to admins when someone’s subscription status changes.
  • Fix: When setting expiration dates using the bulk edit feature, the time is now set to 23:59:59 instead of 00:00:00.
  • Fix: Settings pages now work properly on sites running non-English languages.
  • Fix: Searches now work properly when there’s a stray space character before or after the search term.
  • Fix: PHP 7.2 warning no longer happens when viewing the System Info report.

Version 2.9.12, May 8, 2018

  • Fix: Syntax error when activating the plugin on older versions of PHP.
  • Fix: Javascript not loading on the password reset form.
  • Fix: Two PHP notices when using Google Authenticator.
  • Fix: Error in German translation files.
  • Fix: Only load stylesheets when required in the restricted content message display.
  • Fix: Do not show payment date on pending payments, since they’re not paid yet.
  • Fix: Free members could not see restricted content under certain conditions.
  • Tweak: Remove log in notice after changing password, since you are not logged out.
  • Enhancement: Pass the error ID to rcp_error_messages_html filter.

Version 2.9.11, April 19, 2018

  • Modified templates: payment-express-confirm.php.
  • New: You can now easily connect your Stripe account with Stripe Connect. See your settings page for more details.
  • New: Identify RCP pages (registration form, profile form, etc.) on the Pages > All Pages screen.
  • New: Added rcp_restricted_post_redirect_url filter to allow developers to dynamically control where someone redirects when trying to view a restricted post they don’t have access to.
  • Tweak: Automatically change the currency symbol shown in the Currency Position setting when the Currency option is changed.
  • Tweak: Deprecated the cp_check_paypal_return_price_after_discount() function.
  • Tweak: Add HTML classes to the PayPal Express confirmation form elements.
  • Tweak: Change the wording in the PayPal settings to make it clear that the API keys are not optional.
  • Tweak: Added trial information to debug logging in the gateway class.
  • Tweak: Force debug logging of critical errors.
  • Tweak: Added fees and level ID to the Subscription Levels section of the System Info file.
  • Fix: Accessibility issues on the registration form.
  • Fix: Improve the user experience on the [register_form_stripe] shortcode when someone that’s logged out enters an email address that already exists.
  • Fix: Improve member search feature.
  • Fix: Errors when cancelling a subscription when an existing member moves from a PayPal subscription to a Stripe subscription.
  • Fix: Braintree webhook compatibility issue with the old standalone Braintree add-on.
  • Fix: Duplicate subscriptions created in Stripe under certain conditions.
  • Fix: Improve the Stripe Checkout experience when using the [register_form_stripe] shortcode. It’s now clear that processing is happening in the background after the Stripe Checkout popup closes.
  • Fix: Updated Brazilian translation files.
  • Fix: Member status was improperly set to cancelled when changing from PayPal to another gateway, if the PayPal IPN was delayed.

Version 2.9.10, March 1, 2018

  • Modified templates: login.php, invoice.php.
  • New: Add “Preview” and “Send Test Email” buttons for all email templates.
  • Fix: Password reset success message not shown if already logged in.
  • Fix: Members incorrectly receiving “cancelled subscription” emails when renewing expired memberships.
  • Fix: Admins unable to view restricted posts in archives when “Hide Restricted Posts” is enabled.
  • Fix: Delete database cache when adding/editing subscription levels.
  • Fix: Payment date in invoice template not localized.
  • Tweak: Set sslverify to true wherever used.

Version 2.9.9, February 12, 2018

  • Tweak: Updated German translation.
  • Fix: Unable to create new Stripe plans with Stripe API version 2018-02-05 or later.
  • Fix: “Hide Restricted Posts” feature not showing posts in archives for members of free subscription levels.
  • Fix: Admin “cancel at payment gateway” option not working when used in conjunction with “revoke access now”.
  • Fix: Only cancel memberships via gateway cancellation webhook if member is active.
  • Fix: array_key_exists() error when get_post_type() returns false.
  • Fix: New PayPal Express payments not getting assigned a subscription key.
  • Fix: Subscription level is blank on manual payment emails sent to administrator.
  • Fix: register.js file being loaded in [card_details] shortcode if the user cannot actually update their card details.
  • Fix: JavaScript conflict with other plugins that uses hashes in admin page URLs.
  • Fix: “Can’t combine currencies on a single customer” Stripe error when Stripe currency differs from RCP currency.

Version 2.9.8, January 12, 2018

  • Tweak: Cancelled users who have expired are now changed to the “expired” status. This will update the status of all cancelled users who have reached their expiration date.
  • Fix: Issue where PayPal payments were recorded twice in RCP under certain conditions.
  • Fix: PayPal SoftDescriptor truncated error if the site name + subscription name is too long.
  • New: Added rcp_reminder_notice_periods filter to allow developers to customize email reminder periods.
  • New: Added rcp_invoice_bill_to action hook to allow developers to customize the invoice Bill To area.
  • Tweak: Updated Braintree JavaScript to the latest version.
  • Tweak: Added more debug logs to cron jobs that send renewal/expiration email reminders.
  • Fix: First and last name could be blank in Braintree under certain conditions.
  • Enhancement: Made it more obvious that a member can update their payment card on the [subscription_details] page when their subscription is expired.
  • Fix: No longer log PayPal as the gateway used on free registrations, because PayPal was not used!
  • Fix: Undefined index notice when using the [restrict] shortcode if there wasn’t a Free Content Message configured in the settings.

Version 2.9.7, December 12, 2017

  • Fix: Registration totals are now properly formatted to 2 decimal places when appropriate.
  • Fix: Issue where proration calculation amounts were incorrect due to date formatting.
  • Fix: Set expiration on logged in transients when using Disable Account Sharing feature.
  • Fix: Reports now work properly when switching from Last Year and back to This Year.
  • Fix: CSV payment export now properly handles negative amounts.
  • Fix: Issue where free members were marked as pending if they started to purchase a paid subscription and did not complete it.
  • Fix: Issue with WooCommerce product visibility when products restricted to user level.
  • Fix: Renew Your Subscription link no longer shows for members that have no expiration date.
  • Fix: Members with overdue Stripe subscriptions will no longer be double billed if they go through the registration form and renew or subscribe to a different membership.
  • Fix: Timestamp is now preserved when editing payments.
  • Fix: Settings tabs now work on translated sites.
  • Fix: Issue where pending member counts were incorrect under certain conditions.
  • Tweak: If a member cancels a PayPal Express payment, they’ll be returned to the page they came from instead of always going back to the registration page.
  • Tweak: Adjusted markup on registration form pricing table.
  • New: Added more data to payment export CSV files.

Version 2.9.6, October 20, 2017

  • Fix: New subscriptions immediately cancelled when upgrading from another level and paying with PayPal. That no longer happens.
  • Fix: Roles defined on the subscription level are now reapplied to expired users when they are reactivated via some way other than the registration form.
  • Fix: Manual Payment emails to the admin are now sent to the addresses you have in the Admin Notification Email setting under Restrict > Settings > Email.
  • Fix: Stripe discount codes now properly work regardless of the case used when entering them.
  • Fix: Improve error message display in Stripe gateway.
  • Fix: Trailing zeroes are no longer stripped from amounts in emails.
  • Fix: [subscription_details] shortcode will now show the subscription level name if the member is still pending.
  • Fix: Earnings now calculate properly for very old payments that exist before payments had a status.
  • Fix: Confirm dialog no longer shows twice if you want to delete a payment. Once is enough.
  • Fix: Debug logging now uses the site’s configured timezone when logging.
  • Fix: When specifying a subscription level ID with the [register_form] shortcode, the form will no longer show if the subscription level is unlimited and the member already has the level.
  • Fix: PHP notice when viewing the [subscription_details] page while logged out.
  • Fix: _rcp_new_subscription usermeta flag now properly removed on free users when registration processing is complete.
  • Fix: Changed the font size in the settings page tabs, and fixed the display of the active tab.
  • Tweak: Swapped the order of the Stripe key settings to match the order Stripe shows them to make things a little easier.
  • Tweak: Exclude admins from Prevent Account Sharing feature.

Version 2.9.5, October 16, 2017

  • Fix: Issue where expired members or manually renewing members paying via Stripe could have ended up with two subscriptions in Stripe.
  • Fix: Updated the SDK to the latest version, to help with all the fixes listed below.
  • Fix: will now authorize cards before creating a subscription, which should reduce or eliminate failed payments due to delaying captures.
  • Fix: now does single charges instead of one-time recurring charges when auto-renew is disabled or not selected.
  • Fix: Proration message no longer shows if the member isn’t eligible for proration.
  • Fix: Downgrading from a paid to a free subscription will now properly cancel the paid subscription.
  • Fix: will no longer attempt to create invalid subscriptions with a duration greater than 1 year, since they don’t support that.
  • Fix: Removed Alipay from Stripe Checkout since Stripe no longer supports Alipay via Stripe Checkout. Alipay will be introduced again in the future using another method.
  • Fix: [register_form_stripe] shortcode behavior is now more consistent with the [register_form] shortcode. It now shows the subscription name in the Stripe Checkout popup instead of the site name. It also now supports image.
  • Fix: REST API requests failing when the Prevent Account Sharing option is enabled.
  • Fix: PHP notice when using RCP_Payments::get_payment() with a non-existent payment ID.
  • Fix: PHP notice Undefined property: RCP_Emails::$payment_id when sending emails.
  • Fix: When a member has a lifetime membership, RCP no longer shows that membership level to them on the registration page because renewing a lifetime membership makes no sense.
  • Fix: rcp_is_post_taxonomy_restricted() is unavailable during AJAX requests, which caused issues with certain WooCommerce extensions.
  • Fix: Invoice notes now better support multiple paragraphs and other formatting.
  • Fix: RCP_Payments::get_payment_by() now works properly with strings as parameters.
  • Fix: Braintree compatibility with old Braintree add-on that existed before Braintree was merged into RCP.
  • New: New action hooks for developers: rcp_options_install and rcp_create_tables.
  • New: Allow admins to manually verify accounts that are subject to email verification.
  • New: Added rcp_get_currency_symbol function to get the just the currency symbol of the site’s currency.
  • New: Password reset form now shows a success message after members successfully reset their passwords.
  • Tweak: Discount code input fields on the registration form are now wrapped in a span element, to make layouts in CSS easier.
  • Tweak: Change capability required to view Tools menu from rcp_view_payments to rcp_manage_settings. For admin users, this means nothing since you already have both of those capabilities. This is for fine grained access control to menus, if needed.
  • Tweak: Improve rcp_has_post_restrictions() checks to better support legacy data.

Version 2.9.4, September 22, 2017

  • Fix: Payments over 999 were being improperly saved in the database with a comma for a thousand separator, which caused the invoice to show the incorrect amount due to currency formatting.
  • Fix: Move the rcp_form_processing hook to run later in the registration process, to fix some integration issues with other plugins.
  • Fix: %amount% email tag was sometimes showing the incorrect amount.
  • Fix: Registration form hanging when signing up for a free plan and Braintree is the only gateway enabled.
  • Fix: Login form now supports the class attribute on the [login_form] shortcode.
  • Fix: PHP notice when saving a post if “Members of subscription level” is selected but a radio option below it was not selected.
  • Fix: Updated admin-styles.min.css
  • Tweak: Improve description in the tooltip for the Email Verification setting.
  • New: Allow an empty space to be saved in the message attribute for the [restrict] shortcode.
  • New: %discount_code% email tag now supported, to show which discount code was used, if any.
  • New: Added Norwegian translation.

Version 2.9.3, September 15, 2017

  • Fix: The subscription level dropdown when editing Pending members now shows their pending subscription level instead of the first one in the list.
  • Tweak: Subscription level ID numbers are now easier to read in the admin list.
  • New: rcp_post_excerpt filter added for developers to customize the excerpt content.
  • New: rcp_verification_redirect_url filter added for developers to customize the redirect URL for email verification links.

Version 2.9.2, September 7, 2017

  • Fix: Improved security of Prevent Account Sharing feature.
  • Fix: Avoid sending personally identifiable information (the email address) in email verification links.
  • Fix: Renewal Payment Email no longer sent when a Stripe payment is declined during initial registration.
  • Fix: Braintree payment profile ID not set on some members under certain conditions.
  • Fix: Incorrect expiration date on PayPal non-recurring payments.
  • Fix: Member status and expiration issues when a member renews early with the Manual Payment gateway.
  • Fix: PHP notice when rcp_user_can_access() is used in a template on a 404 page.
  • Fix: Recurring flag is now removed from members when they changed to free subscription levels.
  • Fix: Remove _is_paid post meta data when Remove Data on Uninstall option is enabled.
  • Tweak: Improve text on subscription cancellation notice.
  • Tweak: Payment Received Emails no longer sent for free registrations.
  • New: Search members by payment profile ID.
  • New: Edit / View links on Page settings for quicker access to editing and viewing.
  • New: Add link to member profile on the Edit Payment page.
  • New: rcp_reminder_subscription_args filter to allow developers to change email reminder behavior.

Version 2.9.1, August 29, 2017

  • Fix: Some email template tags not working.
  • Fix: Payments made with Manual Payments option now remaining pending until approved.
  • Fix: Removed duplicate query on payment view page in admin.
  • Fix: RCP_Payments::get_earnings() now supports querying earnings of multiple user ids
  • Fix: Incorrect number of table columns in payment view screen when there are no payments.
  • Fix: Payment date on invoices is now translation ready and will use your date format in the WordPress settings.
  • Fix: Username search results overlapped on Add New Subscription page.
  • Fix: PayPal Express confirmation page is now responsive and looks better on mobile devices.
  • Fix: Zip code field is now longer so that input doesn’t get cut off visually.
  • Fix: Join date is no longer overwritten when someone renews the same subscription level.
  • Fix: CSS now loads on pages with the [subscription_details] shortcode to make it look better.
  • Fix: When updating PayPal billing card you will no longer get the error “Error updating subscription”.
  • Fix: Postal code and CVV are now sent to Braintree to help with fraud detection.
  • Fix: Misspelled description on settings page.
  • Fix: Undefined variable $note on the rare occasion a member’s expiration date fails to update.
  • Fix: transactions linked to the wrong gateway in the admin payment view.
  • Fix: HTML span nesting issue in register.php template.
  • Fix: Paid users no longer given “free” status when the subscription level duration is set to 0. They now get “active” status.
  • Fix: Member join date now uses the local timezone.
  • Fix: Incorrect “subscription renewed” note during new signups.
  • Fix: PayPal Express auto-renewing members not being marked as recurring.
  • Fix: Added back the rcp_edit_member action hook that was mistakenly removed in 2.9.
  • Tweak: Allow subscription price to be entered with only one digit after the decimal.
  • Tweak: rcp_print_user_payments() function is now deprecated.
  • New: Added rcp_payments_page_table_row_actions action hook for developers.
  • New: Added rcp_set_status_value filter for developers to allow filtering of new status in RCP_Member::set_status().
  • New: Added rcp_payments_total_columns filter to payment view table for developers.

Version 2.9, August 14, 2017

  • New: Added subscription renewal reminder notice emails
  • New: Added support for restricting complete post types
  • New: Added support for custom user roles in user role restriction options
  • New: Added Debug Mode option to assist in resolving problems
  • New: A template tag has been added to email settings for retrieving the URL to the most recent invoice on a member’s account
  • New: Password reset emails are now sent in the standard HTML email as all other RCP emails
  • New: Admin screens for subscription levels, discount codes, and payment records now include status filters
  • Tweak: The [register_form] shortcode now permits multiple subscription level IDs to be specified
  • Tweak: The redirect performed after logging in now uses wp_safe_redirect()
  • Tweak: The process-data.php file has been broken up into multiple PHP files to make it easier for developers
  • Tweak: RCP_Payment_Gateway now includes better inline documentation
  • Tweak: The register-single.php template file now includes a log in link
  • Tweak: A new action hook has been added that fires after successful member registration
  • Tweak: Payment records now get created earlier and include a pending status
  • Tweak: Payment records now store the discount code that was used
  • Tweak: Payment records now store the exact subscription level ID related to the payment
  • Tweak: Payment records now store the slug of the payment gateway used, such as stripe
  • Tweak: Invoice download links are now available from the edit member screen
  • Bug: Memberships were not properly renewed in if they included a free trial
  • Bug: PayPal Express could return a fatal error on the confirmation screen for some PayPal accounts
  • Bug: Stripe customer ID not saved early enough during registration
  • Bug: rcp_member_get_expiration_date filter did not include necessary $formatted and $pending variables
  • Bug: WooCommerce: products in restricted category/tag were still accessible via direct URL
  • Bug: WooCommerce: active members could not view products restricted to “Active subscribers only”
  • Bug: Expiration date incorrectly calculated for manual renewals
  • Bug: Subscriptions that auto renew but started with a 100% discount expire improperly
  • Bug: Registration submit button disabled improperly if reCaptcha is enabled but API keys are not entered
  • Bug: Stripe Checkout modal shows price even when signing up for a free trial with the [register_form_stripe] shortcode
  • Bug: Filter in rcp_currency_filter() not used properly
  • Bug: Subscription ID saved to Stripe customer metadata before subscription is actually created in Stripe
  • Bug: Pending users can view content protected by [restrict] shortcode
  • Bug: Duplicate subscriptions created on customers in Stripe if their customer record had a previously delinquent subscription

Version 2.8.6, June 7, 2017

  • Fix: Login redirect now works with the redirect_to parameter when added by WordPress.
  • Fix: Incorrect filter names for registration headers in register-single.php template.
  • Enhancement: Registration form now passes more form fields when calculating totals, for better add-on compatibility.

Version 2.8.5, April 17, 2017

  • Fix: Misspelling of Province on credit card form.
  • Fix: Memberships sometimes cancelled in when moving from recurring to non-recurring subscription.
  • Update Finnish translation.
  • Fix: Round pending subscription amount, which fixes calculation issue with certain gateways like PayPal.
  • Add member and subscription level metadata to subscriptions on
  • Fix: Developers – RCP_Member::get_renewed_date() now properly returns a string instead of an array.
  • Fix: Extra slashes are no longer added to discount code descriptions when saving/updating.

Version 2.8.4, April 5, 2017

  • Fix: Stripe Checkout popup loads twice under certain conditions.
  • Fix: Trailing zeroes stripped from the price displayed on invoices.
  • Fix: Post restrictions not working as expected under certain conditions when restricted to tags, categories, or other custom taxonomies.

Version 2.8.3, March 30, 2017

  • New: Add confirmation dialog when deleting a discount code.
  • Fix: PHP notice when exporting payments if the member’s account has been deleted.
  • Fix: Rounding errors with percentage discounts.
  • Fix: Only show admin notices to users that have necessary capabilities.
  • Fix: Free trial email being sent twice.
  • Fix: Stripe receipt emails will now respect the Stripe account settings.
  • Fix: Missing closing anchor element on View Receipt link.
  • Fix: Incorrect trial end dates in PayPal Express.
  • Fix: Trailing zeroes not required when editing payments.
  • Fix: System info report not showing parent theme template overrides.
  • Fix: Stripe subscriptions sometimes cancelled during upgrades if the webhook is delayed.
  • Enhancement: Improve performance of can_access() method.

Version 2.8.2, March 17, 2017

  • New: You can now require new members to verify their email before gaining access to restricted content (Restrict > Settings > Emails).
  • New: There’s now a confirmation screen when cancelling a subscription via [subscription_details].
  • New: Add a member note when the user’s subscription level changes.
  • New: Add filter for the login redirect URL ( rcp_login_redirect_url ).
  • Fix: Upgrades improperly given both proration and full expiration date extension.
  • Fix: If initial PayPal Express payment fails, user’s account is not set back to “pending”.
  • Fix: Stripe customer balance not removed if payment fails.
  • Fix: Posts restricted by term not included in rcp_is_restricted_content().
  • Fix: Styling issues on payments table on Edit Member screen. Payments table is also now responsive.
  • Fix: Cancelled member who signs up for a recurring Stripe subscription incorrectly receives the “Expired” email.
  • Fix: Username validation fails on multisite installations when using uppercase characters.
  • Fix: Stripe.js loaded twice when EDD Stripe is also activated.
  • Fix: Disabling upgrades removes renewal link from [subscription_details] page.
  • Fix: Auto renew checkbox remains visible when selecting a free level with an unlimited duration.
  • Fix: SQL syntax error on plugin activation.
  • Fix: Display an error message when attempting to edit a member that doesn’t exist.
  • Fix: PayPal subscr_eot IPN incorrectly expiring some memberships that have since been updated.
  • Tweak: Always use RCP_Member::get_expiration_date() method where possible instead of getting user meta directly.
  • Tweak: Improve member notes format during initial signup.
  • Tweak: When reCAPTCHA is activated you can no longer submit the registration form until it’s been filled out.
  • Tweak: Removed the second display of the subscription level price on the register-single.php template.
  • Tweak: Changed the heading on the members page from “Paid Subscribers” to “Members”.

Version 2.8.1, March 9, 2017

  • Fix: Error on sites running a WordPress version prior to 4.7.

Version 2.8, March 9, 2017

  • New: Added Braintree Payments gateway.
  • New: Added support for one-time discounts.
  • New: Added an option to remove all data from the database when uninstalling Restrict Content Pro.
  • New: Payment profiles for member accounts can now be cancelled directly from the member Edit screen when setting their status to “Cancelled”.
  • New: Added filter to allow custom metadata to be attached to Stripe subscriptions.
  • New: Added a setting to select whether Auto Renew is checked on by default for new subscribers.
  • New: Admin emails can now be customized and configured with template tags.
  • New: Added actions in metabox display template and in save meta function.
  • Tweak: Help tabs have been updated and made available for translation.
  • Tweak: All plugin CSS has been refactored to be more clear and consistent.
  • Tweak: Use count on discount codes now get properly adjusted when account registration fails.
  • Fix: If registration with a free trial fails, it is not possible for members to try again.
  • Fix: Manual renewals improperly prorate payment amounts.
  • Fix: Payment profile IDs do not have whitespace removed.
  • Fix: Responsive tables do not work with all themes.
  • Fix: Incorrect behavior with some restriction functions due to empty metadata being saved.

Version 2.7.4, March 3, 2017

  • 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.

Version 2.7.3, February 21, 2017

  • 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 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.

Version 2.7.2, February 14, 2017

  • 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.

Version 2.7.1, February 8, 2017

  • Fix: Missing Stripe token when using Stripe Checkout

Version 2.7, February 8, 2017

  • New: Added integration
  • New: Added support for free trials with payment detail collection
  • New: Added support for failed payment email notifications
  • New: Added support for HTML emails with new email templates
  • New: Added a better integration with Easy Digital Downloads
  • New: Added support for automatically removing subscription level-assigned user roles when members expire / cancel
  • New: Content restricted via taxonomy term is now compatible with our redirect feature
  • New: HTML classes now added via post_class to restricted content
  • New: Members now redirected away from all restricted content when they do not have access and Hide Restricted Posts is enabled
  • New: An option to hide the WordPress toolbar has been added
  • New: A column for “Payment Status” has been added to the [subscription_details] shortcode
  • New: Automatically apply a discount code by including it in the registration URL
  • Tweak: [subscription_details] is now fully responsive
  • Tweak: Payment method selection now uses radio buttons
  • Tweak: Direct links to merchant details screens has been added to payments list in the member edit screen
  • Tweak: All back-end pages now use h1 tags for page headers
  • Fix: First/last name and billing address not sent to PayPal Pro
  • Fix: Incorrect language detected by System Info report
  • Fix: Incorrect payment / discount ID sometimes returned when creating new records
  • Fix: Incorrect description under 2Checkout Test Seller ID field
  • Fix: Invalid integer error when using Alipay in Stripe Checkout
  • Fix: Existing users cannot subscribe with Stripe Checkout
  • Fix: Invalid HTML markup in profile editor
  • Fix: Fatal error when attempting to create a discount code when Stripe API credentials are not set up
  • Fix: Database tables inaccessible in WordPress multisite when network activated
  • Fix: Registration form validation skipped when using Stripe Checkout
  • Fix: Account details not emailed to customers when using Stripe Checkout shortcode
  • Fix: Users with rcp_manage_discounts capability unable to add new discount codes
  • Fix: Memberships are now activated immediately after successful PayPal Pro payment (rather than a few second delay)

Version 2.6.16, January, 21 2017

  • Fix: Issue where expired and pending members were locked out of all site content, regardless of restriction settings.

Version 2.6.15, January, 19 2017

  • Fix: Issue where expired members could still restricted access content under certain conditions.

Version 2.6.14, January, 6 2017

  • New: Added option for opting into beta updates.
  • Updated Spanish es_ES language files.

Version 2.6.13, December 9, 2016

  • Fix: Conflict with AffiliateWP REST API

Version 2.6.12, December 5, 2016

  • Fix: Missing Stripe token error when using Stripe Checkout gateway.

Version 2.6.11, November 29, 2016

  • Fix: Properly show errors on password reset form when errors occur during password resets.
  • Fix: Ensure valid prices are entered the subscription level add/edit screen.
  • Fix: Fatal error on Stripe purchases when card fails.
  • Fix: Fatal error when activating the plugin on old, unsupported versions of PHP.
  • Fix: Prevent Account Sharing didn’t work properly under certain conditions.
  • Fix: Stripe Checkout prevented other payment options from being used if Stripe Checkout was selected first.
  • Fix: Alipay showed on Stripe Checkout even if not enabled.
  • Fix: Incorrect expiration date shown in Active Subscription emails.
  • Fix: PayPal issue where the URL was formatted incorrectly on certain web hosts.
  • Fix: First level not automatically selected on the registration form.
  • Enhancement: Add Swedish translation files.

Version 2.6.10, October 27, 2016

  • Fix: Bug introduced in 2.6.9 that caused some members to not be able to see content they have access to.

Version 2.6.9, October 26, 2016

  • Fix: Alipay option shows in Stripe Checkout on some sites when it’s disabled.
  • Fix: Expiration date formatted incorrectly on the member edit screen for some sites.
  • Fix: Wrong expiration date showed for some pending members on the Members page.
  • Fix: Comments visible for users without access on some posts when the post was restricted by role only.
  • Fix: Duplicate HTML ID in the profile editor template.
  • Fix: Member status did not get set to pending if upgrading from a free trial to a paid membership when using the Manual Payment gateway.
  • Fix: Member expiration date was incorrectly calculated when upgrading from one membership to another when using the Manual Payment gateway.
  • Fix: Set From Name and From Email headers in the Expiring Soon emails.
  • Fix: Invalid character in SoftDescriptor during registration when using PayPal Pro.
  • Tweak: Pass the discount and subscription ID to the rcp_discounts_once_per_user filter.
  • Enhancement: Added “View User Account” link to payment records on the Payments page.

Version 2.6.8, October 3, 2016

  • Fix: User registration does not complete when using Stripe Checkout with a 100% discount code.
  • Fix: Unrecognized options in Stripe Checkout.
  • Fix: Cancellation emails were sent twice when a member cancels a subscription.
  • Fix: improve security of all member-facing forms.
  • Tweak: use rcp_get_currency() helper function throughout the plugin instead of direct option calls. Improves compatibility for developers.
  • Enhancement: Send RCP plugin name, version, and your site URL to Stripe when making charges. Useful for debugging issues with Stripe. Stripe refers to this as setAppInfo.

Version 2.6.7, September 20, 2016

  • Tweak: Better error handling for Stripe processing failures
  • Tweak: Improved performance of registration form processing
  • Tweak: Removed “Cancel” button from edit member screen to reduce confusion
  • Tweak: Notice is now displayed when enabling login redirect without a login form on the redirect page
  • Fix: Logos on invoices can extend beyond container
  • Fix: Invalid integer error with Stripe when using discounts
  • Fix: Custom date range not clickable in Reports
  • Fix: Content improperly restricted to free members when using access levels
  • Fix: Incorrect filter name in payment meta DB class
  • Fix: Check if DONOTCACHE page is already defined before defining it
  • Fix: Incorrect capability checked when generating invoice
  • Fix: Member join date not set properly when manually changing a member’s subscription level
  • Fix: Memory leak on edit member page that could cause session expired notices
  • Fix: [restrict] shortcode improperly restricts to free members
  • Fix: User role not updated when downgrading / upgrading
  • Fix: Subscription level cache not flushed when updating subscription level
  • Fix: Free accounts cannot be registered when 2Checkout gateway is active

Version 2.6.6, August 8, 2016

  • Fix: Payments not logged with PayPal Pro and PayPal Express when auto-renew is disabled.
  • Fix: Incorrect subscription level selected on the registration form when manually specifying the subscription level ID in the URL.
  • Fix: A subscription level’s metadata is now deleted when the subcription level is deleted in the admin.
  • Enhancement: Removed the use of PHP extract function from all shortcodes.
  • Enhancement: The rcp_locate_template function now supports registering custom template locations via the rcp_template_stack filter.
  • Enhancement: Added the rcp_available_template_tags action hook to let developers add new email template tags to the Available Template Tags display in the Email settings tab.

Version 2.6.5, August 1, 2016

  • Fix: Stripe gateway not working properly on some sites. Fixes invalid request errors due to TLS.
  • Fix: “Last Week” earnings report not working properly.
  • Fix: PayPal Pro gateway not working properly on some accounts that do not use automatic renewals.
  • Fix: Issue where paid members could not renew their expired subscriptions on the registration form.
  • Fix: Remove empty spaces from Stripe API keys when saving to prevent copy and paste errors when entering the keys in settings.
  • Fix: Show an error message on registration form if Stripe keys are not entered.
  • Fix: Define CAL_GREGORIAN constant on systems that do not do it already.
  • Fix: Update settings description for Hide Premium Posts.
  • Enhancement: Add Recurring column to member CSV export.

Version 2.6.4, July 26, 2016

  • Fix: Discounted total calculation bug when discounted total is $1000 or more.
  • Fix: Stripe Checkout missing token error when used with the [register_form] shortcode and the ID option.
  • Fix: Stripe subscription expiration dates improperly extended under certain conditions.
  • Fix: Subscription name blank in emails when the subscription was added manually.
  • Fix: Timezone configurations not always respected when calculating expirations.
  • Fix: Invoices not showing the email address defined in settings.
  • Fix: Registration form error message when a site only has free subscriptions activated.
  • Fix: Auto-fill the email address on the Stripe Checkout form when possible.
  • Enhancement: Added a rcp_is_sandbox helper function for determining if a site is in sandbox mode.
  • Updated: Dutch language files.

Version 2.6.3, July 11, 2016

  • Fix: Issue with taxonomy restrictions introduced in 2.6.2.

Version 2.6.2, July 11, 2016

  • Fix: Issue with content restriction interface on post edit screen that caused it to show the improper setting when “Members of any subscription level” was set.

Version 2.6.1, July 8, 2016

  • Fix: Issue that caused content to be visible when the Paid Only option was used without any other restrictions defined.
  • Fix: Display issue with the new user interface for restricting content.

Version 2.6, July 7, 2016

  • New: Redesigned user interface for restricting content on posts and pages
  • New: All admin list tables are now fully responsive
  • New:  Added contextual tool tips and improved setting descriptions throughout the plugin
  • New: Replaced PDF invoices with HTML invoices, making invoices faster and easier to customize, and also reduced the size of the plugin files significantly
  • New: Comments on restricted content are now automatically hidden from members without necessary access privileges
  • New: A new Add-ons page has been added to the Restrict menu
  • New: Added support for Alipay in Stripe Checkout
  • New: Payment transaction IDs are now linked directly to the merchant processor page
  • New: PayPal customers can now update the credit / debit card attached to their subscription
  • New: Join and renewal dates are now stored in meta data for members
  • New: Added metadata APIs for subscription levels and payments
  • New: Added improved database upgrade API
  • Tweak: Fixed widths have been removed from labels on registration form
  • Tweak: Improved member counts that are significantly faster
  • Tweak: Indexes have been added to all database tables to improve performance
  • Tweak: Stripe API libraries have been updated to the latest version
  • Tweak: Updated French translation
  • Fix: Expiring / renewing soon email not sent to customers that upgrade
  • Fix: “Cannot combine currencies on customer” error in Stripe
  • Fix: “No such plan: false” error in Stripe
  • Fix: Incorrect locale parameter passed to Stripe Checkout
  • Fix: Payment Received emails are sent even when disabled
  • Fix: Payment amount not properly sanitized in PayPal IPN processing
  • Fix: Incorrect support forum link
  • Fix: Pending expiration date shown in subscription.php template file
  • Fix: Coupon codes not created in Stripe when only Stripe Checkout is enabled
  • Fix: Revoke access link does not actually revoke access
  • Fix: <LI> tag cannot be changed in register.php without breaking registration
  • Fix: Editing a discount code results in a duplicate code being created in Stripe
  • Fix: Activate License button missing
  • Fix: Password not validated during Change Password form submission

Version 2.5.4, May 16, 2016

  • Fix: Missing amount verification during PayPal IPN processing
  • Fix: Incorrect page set for “Update Billing Card Page” during plugin install
  • Fix: Incorrect submit button text shows when using Stripe Checkout and a free level is selected
  • Fix: %subscription_name% email tag returns wrong subscription name when upgrading subscription
  • Fix: Non-translatable strings in PayPal Express Confirmation template
  • Fix: WP cron events not deleted when plugin is uninstalled
  • Tweak: Improved access checks for [restrict] shortcode, including the introduction of a new “rcp_restrict_shortcode_has_access” filter

Version 2.5.3, April 29, 2016

  • Fix: Missing text domains on strings
  • Fix: One-time charges through Stripe not connected to customer in Stripe
  • Fix: Currency sign on Stripe Checkout modal incorrect when not using USD
  • Fix: Missing text strings in POT file
  • Fix: Formatting problems with amounts over 1000
  • Fix: Unrestricted WooCommerce products get restricted improperly
  • Fix: Previous subscription not always cancelled in merchant processor when upgrading subscription levels
  • Fix: Previous subscription not cancelled when upgrading to one-time payment option
  • Fix: Refunds report introduced in 2.5 accidentally removed
  • New: Added Portuguese translation

Version 2.5.2, April 7, 2016

  • Fix: Trailing zeros missing from final price on registration form
  • Fix: Incorrect column span on registration form
  • Fix: Incorrect date recorded for some Stripe payments

Version 2.5.1, April 5, 2016

  • Fix: Prorating amounts over 1000 fails
  • Fix: WooCommerce products incorrectly hidden when catalogue visibility is disabled
  • Fix: Nav menus cannot be saved when Restrict Content Pro is active
  • Tweak: Removed Description column in pricing details section of registration form

Version 2.5, March 29, 2016

  • New: Added support for upgrading and downgrading between subscription levels with proration
  • New: Added improved discount, signup fee, and price display on registration
  • New: Added support for Stripe Checkout
  • New: Improved payment history display on Member details page
  • New: Added a View Member link to payment history rows
  • New: Added a System Info report to aid in technical support
  • New: Added a Refund report to the Reports page
  • New: Added improved support for detecting re-activated subscriptions in Stripe
  • New: Added new shortcodes for displaying membership information of currently logged in member
  • New: Currently stored credit / debit card details now show on card update form
  • New: Content restriction options added to custom taxonomies
  • Fix: Is Recurring flag not set properly on successful but late payments
  • Fix:  Initial payments not collected in PayPal Pro gateway
  • Fix: Members not emailed when membership is added manually by site admin
  • Fix: WP Approve User integration improperly disallows access to content with no restrictions
  • Fix: PayPal Express and Pro show an error if the initial amount is less than 0
  • Fix: Zero-decimal currencies not supported properly in Stripe
  • Fix: Incorrect URL to Help page
  • Fix: WooCommerce products still accessible even when restricted
  • Fix: Payment dates do not match up with payment processor
  • Fix: Subscription price not updated in Stripe when updated in Restrict Content Pro
  • Fix: Renewal dates not properly synced with merchant processor when payments are processed
  • Fix: PayPal Express logs the profile ID instead of the transaction ID

Version 2.4.11, February 12, 2016

  • Fix: PayPal Sandbox rejecting Express and Pro signups due to http version
  • Fix: Recurring payments in 2Checkout not processed properly
  • Tweak: Updated PayPal APIs to version 124

Version 2.4.10, February 7, 2016

  • Fix: Signup fees reversed in Stripe resulting in credits being given instead of fees

Version 2.4.9, February 2, 2016

  • Fix: Expiration date not set when a pending date was already set
  • Fix: Custom report ranges that span year boundaries display improperly
  • Fix: Discount codes permitted non-valid amounts to be saved
  • Fix: Subscription levels could be created without a name
  • Fix: HTML emails were not possible due to htmlspecialchars() function
  • New: Added new hooks for when payment processing during signup fails

Version 2.4.8, January 22, 2016

  • Fix: Duplicate 0.00 transactions with Stripe when using a signup fee
  • Fix: Incorrect expiration dates with registrations through Stripe

Version 2.4.7, December 29, 2015

  • Fix: Expiration dates incorrectly set after renewing or upgrading an existing account
  • Fix: “Profile Description Invalid” error sometimes in PayPal Express
  • New: Added class names to table columns for the Members table
  • Tweak: Added nocache headers to the lost password processing screens

Version 2.4.6, December 18, 2015

  • Fix: Apply Discount button was missing from register-single.php template file
  • New: Members can now log in via email

Version 2.4.5, December 11, 2015

  • Fix: Logged out users shown Account Pending Verification message on all posts and pages

Version 2.4.4, December 10, 2015

  • Fix: Expiration date doubled when members subscribe with PayPal, cancel before completing payment, then subscribe again.
  • Fix: Typo email settings

Version 2.4.3, November 24, 2015

  • Fix: Bug with upgrading currently active subscriptions
  • Fix: Missing INS processing for 2Checkout
  • Fix: Undefined variable when discount code is not used
  • New: Added action hooks to the top and bottom of the Restrict this Content metabox
  • New: Added filters to the member queries run during cron jobs

Version 2.4.2, November 7, 2015

  • Fix: Bug with Stripe webhook processing that could prevent account cancellations from working properly when cancelled from Stripe

Version 2.4.1, November 4, 2015

  • Fix: Discount codes not discounting price in payment gateways

Version 2.4, November 2, 2015

  • New: Added support for 2Checkout
  • New: Added support for WP Approve User plugin for requiring admins approve user accounts
  • Fix: PayPal payment dates and expiration dates getting out of sync

Version 2.3.8, October 21, 2015

  • Fix: Duplicate active email sent for users that register with a 100% discount code
  • Fix: Active email not sent properly for new registrations
  • Fix: Trial email sent improperly when 100% discount code is used
  • Fix: 100% discount code generates “Free subscriptions cannot be automatically renewed” error

Version 2.3.7, October 21, 2015

  • Fix: Missing Stripe token error

Version 2.3.6, October 20, 2015

  • Fix: Active / Welcome emails sent even for non-new accounts
  • Fix: Admin notification after updating payment persists across page loads
  • Fix: Manually created payments do not flush the earnings cache
  • Fix: User search field results shown incorrectly when no results found
  • Fix: Spelling errors across several admin pages
  • Fix: New Subscription emails show incorrect expiration date in some cases
  • Fix: Non-numeric amounts can be entered for payments
  • Fix: Stripe customer credit properly supported now

Version 2.3.5, October 6, 2015

  • Fix: Expiration date is sometimes shown incorrectly in Payment Received emails
  • Fix: Payment dates not always respecting server’s timestamp
  • Fix: Undefined index notices when activating/deactivating discount codes when Stripe is enabled
  • Fix: Spelling error, “logout” should be “log out”
  • Fix: Spelling error, “Mail Chimp” should be “MailChimp”
  • Fix: Grammar error, “Setup” should be “Set Up”
  • Fix: Incorrect link to documentation
  • Fix: Undefined index notices when settings have not been saved

Version 2.3.4, September 24, 2015

  • Fix: Variable typo that caused PayPal Standard IPN processing to not work properly

Version 2.3.3, September 22, 2015

  • Fix: renew() method incorrectly setting member status in some cases

Version 2.3.2, September 22, 2015

  • Fix: PayPal Express IPNs not being processed properly on all accounts

Version 2.3.1, September 18, 2015

  • Fix: Reset password URL not working

Version 2.3, September 18, 2015

  • New: Added the ability to bulk edit member accounts
  • New: Added support for reCaptcha v2.0 from Google
  • New: Added Payment Received email option
  • New: Account, Profile, and Card Update pages are now created automatically during install
  • Fix: account page text is too large in Twenty Fifteen theme
  • Fix: Renew link improperly shown for free members
  • Fix: Last Week earnings not shown properly when it crosses a month boundary

Version 2.2.7, August 19, 2015

  • Fixed a bug that caused expiration dates to be set too far in the future during registration.

Version 2.2.6, August 11, 2015

  • Fixed a bug with negative signup fees and recurring subscriptions in Stripe
  • Fixed a bug that caused declined card errors to not get caught when updating the billing card
  • Added a confirmation message to the Update Billing Card form

Version 2.2.5, August 6, 2015

  • Fixed a bug with expiration dates getting set too far ahead for customers that register through Stripe

Version 2.2.4, August 3, 2015

  • Fixed a bug with expiration dates being calculated incorrectly when calculating for a subscription level that never expires
  • Fixed a bug that caused the Active Subscription email to include the wrong expiration date
  • Fixed a bug that caused the Screen Options tab to not save properly
  • Tweak to ensure the member’s display name is set during registration

Version 2.2.3, July 20, 2015

  • Fixed an issue with fatal errors when updating pages that contain the RCP shortcodes on some websites.
  • Updated New User notification emails to contain the user login names
  • Tweak registration form JS to ensure that clicking Register multiple times doesn’t cause issues
  • Added member status to the member export

Version 2.2.2, July 9, 2015

  • Fixed an issue with calculating member’s new expiration date when accounts are renewed.

Version 2.2.1, July 8, 2015

  • Fixed an issue with WooCommerce products not being shown to registered users

Version 2.2, July 6, 2015

  • Added support for restricting WooCommerce products
  • Added support for 2-factor authentication through Google Authenticator
  • Added members’ payment profile IDs to member export file
  • Added new action hooks to login form template file
  • Fixed issue with members not being logged in automatically during registration
  • Fixed “unexpected output” during activation

Version 2.1.11, June 18, 2015

  • Fixed a PHP notice during installation
  • Fixed an issue with discount code validation on single registration forms
  • Fixed an issue with discount codes not being re-validated when the level is changed
  • Fixed an issue with one-time Stripe charges getting attributed to the wrong user
  • Fixed an issue with the Help page not redirecting to the documentation site

Version 2.1.10, May 27, 2015

  • Fixed an issue with signup fees not working in Stripe
  • Added new useremail template tag for emails

Version 2.1.9, May 27, 2015

  • Fixed an issue with credit/debit card form not displaying if the first level is Free
  • Fixed a fatal error in the PayPal Pro gateway that occurred if API credentials had not been entered
  • Tweaked the card number field to have a max length of 20 characters
  • Tweaked the description text in settings

Version 2.1.8, May 21, 2015

  • Fixed an error message when updating discounts with Stripe active
  • Fixed an issue with payment settings disappearing when plugin is reactivated
  • Fixed a typo in the settings page
  • Fixed an issue with email notifications not being sent when accounts are cancelled

Version 2.1.7, May 21, 2015

  • Fixed a bug with reCaptcha over SSL

Version 2.1.6, May 13, 2015

  • Fixed a fatal error when updating credit / debit cards in Stripe
  • Fixed a bug that caused the “Active” email to be sent to trial subscribers

Version 2.1.5, May 12, 2015

  • Fixed a bug with expiration dates on Unlimited plans
  • Fixed a bug with the price not showing up on the single register template
  • Fixed a bug with the Stripe libraries not being loaded if another plugin had already loaded it

Version 2.1.4, May 11, 2015

  • Fixed a bug that caused emails to not be sent to free or trial members.

Version 2.1.3, May 9, 2015

  • Fixed a bug that caused the credit / debit card form to not be displayed when passing the id=”x” parameter to the register form short code.

Version 2.1.2, May 6, 2015

  • Fixed a bug that caused PayPal Standard subscriptions to not get activated

Version 2.1.1, May 4, 2015

  • Fixed a bug with editing / creating discount codes when the Stripe gateway is inactive

Version 2.1, April 30, 2015

  • This is a major release. Please see release post for detailed information.
  • Stripe, PayPal Pro, and PayPal Express now included for free. Braintree integration is also free as an add-on.
  • New payment gateway API for developers to build additional payment processor integrations.
  • New Manual Payment gateway for processing manual payments.
  • Dramatically improved registration form processing.
  • Registration form now submits via ajax and displays error messages without a page  reload.
  • Better member cancellation options from member’s account pages
  • Site admins can now cancel member’s payment profile from Restrict > Members.
  • Improved and re-organized settings screen.
  • New RCP_Member class for developers.
  • New RCP_Payment_Gateway class for developers.
  • New rcp_user_can_access() function for developers.
  • Numerous other new functions for developers.

Version 2.0.17, April 20, 2015

  • Minor XSS security fix

Version 2.0.16, February 11, 2015

  • Fixed a conflict with The Event Calendar plugin
  • Updated the French translation files

Version 2.0.15, January 29, 2015

  • Fixed a bug with signup fees in PayPal over 1,000
  • Updated the plugin updater class
  • Fixed a spelling error
  • Modified the shortcodes include file to always be included
  • Fixed an incorrect user ID variable during the process that adds a manual subscription to a user
  • Introduced rcp_before_subscription_form_fields hook
  • Fixed two method declarations in the WP_Logging class

Version 2.0.14, November 19,  2014

  • Added an option to let non-recurring members renew their access from their account page

Version 2.0.13, October 29, 2014

  • Fixed a bug in the updater that caused update checks to run too often.

Version 2.0.12, October 21, 2014

  • Improved plugin updater class

Version 2.0.11, October 7, 2014

  • Updated language files

Version 2.0.10, October 1, 2014

  • Fixed a bug with adding subscriptions manually to user accounts

Version 2.0.9, August 27, 2014

  • Updated the Restrict menu icon to use dashicons
  • Automatically add / remove user roles anytime their subscription level is changed in the admin
  • Default the login redirect to the home page
  • Fixed a few typos
  • Added a fallback cal_days_in_month() function for hosts that don’t have it enabled

Version 2.0.8, August 14, 2014

  • Fixed a bug  with CSS not loading on the subscription details and profile editor short codes
  • Added an Edit Member button to the View Member details screen
  • Improved the Members page filtering and search
  • Added support for setting the From Name and From Email address in Settings > Emails
  • Cancelled members now actually get marked as Cancelled instead of staying as Active and then getting marked as Expired
  • Linked the admin notice on first install to the Restrict > Settings page
  • Fixed an inaccurate field description in settings
  • Improved the license activation process and fixed a bug that prevented license keys from being activated

Version 2.0.7, June 24, 2014

  • Fixed a bug with the Payment Export not including all payments.

Version 2.0.6, June 19, 2014

  • Fixed a bug with payment method forms showing when signing up for a free subscription level
  • Fixed a bug with the discount field showing when signing up for a free subscription level
  • Fixed a bug with the Auto Renew field showing when signing up for a free subscription level

Version 2.0.5, May 20, 2014

  • Added an option to control the number of members that are exported with the CSV export
  • Fixed a bug with the auto-renew options not showing on individual registration forms
  • Fixed a bug with pending members getting the Expiring Soon notice
  • Added year/month options to the Payment CSV export
  • Added an option to manually toggle a member’s trialing status
  • Fixed a bug with amounts in the PDF Invoices

Version 2.0.4, May 13, 2014

  • Fixed a bug with the wp_editor() used in the Messages section of settings
  • Fixed a bug with user roles not being set properly on registration

Version 2.0.3, May 13, 2014

  • Fixed a bug with discount codes not getting attached to user accounts
  • Fixed a bug with rcp_get_user_role() when the user isn’t part of the site

Version 2.0.2, April 21, 2014

  • Fixed a bug with custom registration forms related to the Stripe payment gateway

Version 2.0.1, April 18, 2014

  • Fixed a bug that caused a fatal error with wp_get_current_user() during certain actions
  • Fixed a bug with the login form redirect on the subscription_details short code

Version 2.0, April 11, 2014

  • Added support for PDF Invoices of subscription payments
  • Greatly improved the member’s subscription details area
  • Added support for custom registration pages with the [register_form id=”x”] short code
  • Added improved caching / performance throughout the plugin, primarily related to subscription level and payment queries
  • Added support for restricting posts based on the category they are filed in
  • Added integration for the Limit Login Attempts plugin
  • Added custom capabilities for all admin pages
  • Added a new setting for PayPal Page Style
  • Added an option to control whether all subscriptions auto renew or not
  • Added new rcp_edit_member hook
  • Added new RCP profile editor hooks
  • Added options to disable each of the emails individually
  • Tweak: improve the way the login form shows when a user is logged in
  • Tweak: properly set the exact time when creating a manual payment
  • Tweak: improve issue with members expiring on the wrong day when signing up on the last day of the month
  • Tweak: always show the registration levels on the registration page
  • Tweak: improved expiration cron jobs

Version 1.9.6, February 5, 2014

Added better support for 100% discount codes and non-PayPal payment gateways.

Added better caching to the subscription level database class.

Version 1.9.5, January 21, 2014

  • Improved validation of the user information when saving the profile form.
  • Fixed a bug that would allow a user to update their email to that of another user.
  • Fixed a bug that would allow a user to completely remove their email.

Version 1.9.4, December 23, 2013

  • Fixed a bug with the user role not saving when first creating a subscription level
  • Improved the UI of the Cancel buttons in admin headers
  • Added a JS action for rcp_discount_applied
  • Added .rcp_gateway_fields class

Version 1.9.3 – December 9, 2013

  • Improve reliability of license activation and deactivation
  • Only setup user transients if single-login is enabled
  • Fix bug with Last Month report view when current month is December
  • Rewrite PayPal redirect to make all args filterable
  • Removed erroneous ID attribute
  • Better filters for email messages and receipients
  • Better organization of user level checks
  • Add support for setting the user role on a per-subscription basis
  • Fixed bug with updating subscription levels when no changes were made
  • Improved the expired users cron job

Version 1.9.2 – October 25, 2013

  • Fixed a bug with payment amounts over 1000

Version 1.9.1 – October 21, 2013

  • Fixed an undefined index error on the subscription Add New screen.
  • Fixed a bug with the subscription level order getting overwritten when updating a level.

Version 1.9 – October 4, 2013

  • Added support for signup fees and discounts for subscription levels.
  • Added the ability to search payments.
  • Added payment transaction ID tracking.

Version 1.8.1

  • Fixed a bug with subscription level duration units not saving correctly.

Version 1.8

  • Added a brand new Reports page with earnings and signup graphs.

Version 1.7

  • Added support for manually creating payments.
  • Fixed a bug with ‘class’ and other attributes getting stripped from Subscription Level descriptions.

Version 1.6.3

  • Fixed a bug with the Expiring Soon emails getting sent to recurring subscribers.

Version 1.6.2

  • Fixed a problem with the discount table creation.

Version 1.6.1

  • Fixed a problem with the [restrict] short code.

Version 1.6

  • Added the ability to restrict discount codes to specific subscription levels
  • Added a “Remember Me” checkbox to the login form
  • Added new options to the “Restrict This Content” meta box that allows content to be restricted to multiple subscription levels
  • Non-recurring subscribers can now renew their membership at any time
  • Added new Renewal Notice reminders that can be automatically sent before a user expires.

Version 1.5.7

  • Fixed a problem with not being able to set subscription durations to higher than 127 days/months/years.
  • Added Hebrew translation files

Version 1.5.6

  • Added a new, better plugin updater system. You MUST enter your license key in the plugin settings to get future updates.
  • Improved the expiration / renewal date text on the Subscription Details short code.
  • Renamed the Payments settings tab to General.

Version 1.5.5

  • Improved RTL compatibility.
  • Fixed an issue with LI and UL tags getting stripped from subscription level descriptions.

Version 1.5.4

  • Fixed another issue with UTF8 encoding/decoding.

Version 1.5.3

  • Fixed an issue with UTF8 encoding/decoding.

Version 1.5.2

  • Updated manual update_user_meta() calls for member status to use rcp_set_status()
  • Fixed an additional issue with PayPal payments not getting recorded.

Version .1.5.1

  • Fixed and issue with PayPal payments not getting recorded.

Version 1.5

  • New: Trial memberships can now upgrade to paid memberships at any time.
  • New: Site admins can view all pad content.
  • New: Usernames in Restrict > Members are now linked to the user\’s profile.
  • New: Members can now be searched from Restrict > Members.
  • New: Added a new [rcp_profile_editor] short code.
  • New: Registration, login, change password, and profile editor forms now included template files that can be easily, and safely modified.
  • New: Added an option to delete payments.
  • New: Added an option to view all payments by user.
  • New: Added member first names to user export.
  • New: Rewrote export system to be more flexible and extensible.
  • New: Wrote new database interaction classes to make it easier for extensions to record / modify data.
  • New: Added an option to revent account sharing.
  • New: Added new action hooks.
  • Fix: email field on registration wasn\’t given a .valid or .error class.
  • Fix: Admin javascript alerts are now localized for translation.
  • Fix: Expiration date could not be left blank.
  • Fix: User expiration dates were not localized.
  • Fix: reCaptcha caused a fatal error if not configured correctly.
  • Fix: stripslashes on subscription level names.
  • Fix: The Upgrade link in [subscription_details] was shown even when only one free subscription level was active.
  • Tweaked: Improved the registration processing function.
  • Tweaked: Improved the default CSS.


  • Added new email tags for %firstname%, %lastname%, and %displayname%.
  • Fixed a bug with the %username% email tag.


  • Fixed a missing parameter error with rcp_count_members()

Version 1.4.4

  • Introduced new Logs page to view gateway error logs
  • Fixed an error in the PayPal gateway that caused members to not renew correctly

Version 1.4.3

  • Added new %amount% tag to the email templates
  • Fixed a bug with teh PayPal cancellation link
  • Fixed the subject line of the free email
  • Fixed the %blogname% email template tag
  • Improved file structure and organization
  • Improved code documentation

Version 1.4.2

  • Fixed a security vulnerability with the function that writes to the database
  • Fixed a bug with setting discount codes to percentage type
  • Fixed a JS bug on the registration form for showing / hiding auto renew and the discount

Version 1.4.1

  • Forced auto-renew to false when signing up for a forever plan
  • Fixed a bug with wpdb->prepare()

Version 1.4

  • Renamed Redirect page to Success page
  • Added new rcp_is_paid_content filter
  • Added a new logging system for tracking payment gateway errors
  • Fixed issues with $wpdb->prepare() notices
  • Made “View Details” always visible on the Users page
  • Improved data sanitization
  • Added a new notice when a user is updated
  • Added new feature for “User Notes”
  • Improved default CSS
  • Added Arabic language files
  • Added Portuguese language files
  • Added new rcp_redirect_from_wp_login() function
  • Removed user-registration-enabled check for the registration form

Version 1.3.3

  • Updated default language files.
  • Fixed some missing text domains.
  • Fixed a double slash in script URLs.
  • Improved the function that checks to see if a payment has been recorded yet.
  • Added a function to ensure RCP can be network activated.
  • Fixed problem with HTML in subscription level descriptions.


  • Added new rcp_pre_edit_discount action
  • Improved data sanitization for discount codes
  • Added new rcp_pre_add_discount hook
  • Added Spanish translation files
  • Added new rcp_show_subscription_level() function for determing if a level should be shown on the signup form


  • Fixed a bug with a white screen after free signups


  • Fixed a small bug with subscription lengths

Version 1.3.2

  • Moved reCaptcha to a new rcp_show_captcha() function so it can be more easily modified
  • Added new “rcp_return_url” filter so that the URL users are returned to can be more easily modified
  • Fixed several potential security flaws
  • Improved data validation and sanitization throughout the plugin
  • Improved internationalization of date formats
  • Fixed a problem with restricting to free users and access levels at the same time
  • Added do_shortcode() to teaser messages so that they render short codes
  • Improved documentation and help text throughout the plugin
  • Added new “rcp_access_levels” filter for modifying the available access levels
  • Fixed some broken images in the Help page
  • Updated French language files
  • Fixed a problem with calculating users first expiration date that caused members to expire before their renewing payment was made
  • Added new “rcp_errors_before” and “rcp_errors_after” for adding content before/after error messages are displayed
  • Improved the functions that calculate a discounted price
  • Added a new function for storing discount codes in user\’s meta
  • Added new registration-functions.php and performed significant code cleanup
  • Added a new filter “rcp_default_user_level” for the default user role given to members on signup


  • Fixed a problem with allow furl_open

Version 1.3.1

  • Fixed a bug with the auto updater
  • Replaced a global with a constant
  • Fixed a bug with expired users cron jobs

Version 1.3

  • Documentated conflict with object caching
  • Improved the email setting labels
  • Hid the payment gateway checkboxes unless more than one gateway is available
  • Added new rcp_get_currencies() function that can be filtered to allow more currencies
  • Dramatically improved the rcp_curreny_filter() function with filters for other plugins to use to customize currency display
  • Added new meta key for storing the PayPal recurring payment ID
  • Improved security checks in IPN listener
  • Fixed incorrect email address in IPN email log
  • Added an option to disable IPN verification from PayPal
  • Fixed the code prettifier in the help page
  • Fixed a problem with the expired users cron job and users with no expiration date
  • Fixed a bug with subscription level IDs in the registration form
  • Fixed incorrect variable in rcp_set_status
  • Added unique ID to each subscription level in the registration form
  • Made default user level filterable
  • Rewrote the settings page to follow the WP core UI
  • Fixed a problem with the update notifier
  • Improved the Paid Only option label to make it more clear
  • Added a new filter to the meta box fields array to allow extra fields to be added
  • Improved front end JS
  • Added new filter to the rcp_excerpt_by_id() function
  • Added Polish language files
  • DIscount code input now gets hidden when a free subscription level is selected
  • Added improved number formatting
  • Improved rcp_get_members()
  • Replaced custom SQL query with rcp_get_subscription_levels()
  • Fixed problems with sorting users by subscription level

Version 1.2.4

  • Added an ID to the discount codes P tag on the registration form
  • Fixed a security flaw in the signup process that created a way for users to get access to premium content for free
  • Registration fields now retain their information on submission error
  • Fixed a missing argument in rcp_log_user_in()
  • Fixed a problem with the function that calculates the discounted price
  • Made discounts active by default
  • Added some additional hooks to PayPal gateway
  • Added an option to cancel subscription from the [subscription_details] shortcode for new signups
  • Minor improvements to the PayPal gateway

Version 1.2.3

  • Made some improvements to the PayPal verification to help prevent verification failures
  • Updated default language files
  • Fixed a problem with the JS that hides the auto renew option when a free subscription is selected
  • Added new option to disable admin notifications
  • Added an option to export free users
  • Fixed the level query arg for auto plan selection

Version 1.2.2

  • Fixed a bug with the user expiration cron job that sends out expiration notices

Version 1.2.1

  • Fixed a couple of minor bugs with the user page columns
  • Changed “Free” to 0 in the rcp_currency_filter() function
  • Removed the IPN error log option
  • Added tax=0 to the PayPal redirect
  • Updated the login form to auto redirect to the current page
  • Added JS to hide the auto renew option when a free subscription is selected
  • Improved markup of the subscription details short code
  • Added support for the Turkish Lira currency
  • Moved load_plugin_textdomain() to an init hooked function
  • Added action hooks and filters to the PayPal listener

Version 1.2.0

  • Fixed a bug that caused bad encoding of apostrophes in the email “From” name.
  • Fixed a bug that prevented admins from manually adding subscriptions to users.
  • A few minor code improvements.
  • Improved file organization.
  • Updated language files.

Version 1.1.9

  • Updated the default language files to include new strings for translation.
  • Added do_action() hooks to the add/edit subscription level functions.
  • Improved the payment gateway system.
  • Added ajaxed live search to the “Add New Subscription” form.
  • Fixed a bug with the PayPal Sandbox mode

Version 1.1.8

  • Fixed a bug that caused non-active members to have an expiration date of 1970 in the [subscription_details] shortcode.
  • Improved the registration form CSS slightly.
  • Added a new advanced query arg that can be used on the Members page in the admin for displaying all members that signed up live vs. those that were added by admins.
  • Added missed jQuery UI theme images for the datepicker.
  • Fixed the double message problem with admin alert emails.


  • Fixed a formatting bug with the discounts table when no codes have been created yet.
  • Fixed a formatting bug with the subscriptions levels table when no levels have been created yet.
  • Fixed the data type of the payment\’s table “amount” column.


  • Fixed a bug that caused the cron job added in the previous version to run constantly.

Version 1.1.7

  • Added a cron job that checks for expired users every day and sends an email to the user when they have expired.
  • Fixed a bug were subscription access levels were reset to 0 when editing.
  • Fixed a few issues with utf8 encoding.

Version 1.1.6

  • Added a meta box option for restricting content based upon the subscription level.
  • Added a “subscription=ID” parameter to the [restrict] short code for limiting content to specific subscription levels.
  • Updated Help page with information about access levels and restricting to subscription levels.
  • Improved some admin CSS and jQuery loading.
  • Improved the layout of the “Restrict this Content” metabox so that it can now be placed in the side column.
  • Added new demonstration videos to the Help page on how to restrict content.

Version 1.1.5

  • Moved the “members per page” and “payments per page” to the screen options tab.
  • Added FAQs to the Help page.
  • Added a div.rcp-payment-history around the user\’s payment history.
  • Added missing class attribute to “no payments recorded” message in the [subscription_details] shortcode.

Version 1.1.4

  • Added support for access level restriction on free content.
  • Added do_shortcode() to the [is_not_paid] short code.
  • Made the first subscription level checked by default on the registration page.
  • Added missing HTML element classes to the registration form.

Version 1.1.3

  • Released the Math Verification add-on:
  • Fixed an undefined variable bug in the front end JS.
  • Added option to redirect default WP login URL to custom page.
  • Added and in-dashboard plugin updater so that new releases can be updated to automatically from WordPress.
  • Fixed a bug with the “Hide Premium Posts” option.