Today we are happy to announce the final release of Restrict Content Pro version 3.0. With this being such a huge release, we spent extra time testing all the features and adding support for 3.0 to all our add-ons ahead of time. We’d like to thank everyone who took the time to install and test the beta release – your help was greatly appreciated!

Our 3.0 release includes the ability to create payment plans, which allow your customers to pay membership fees in installments; the ability to restrict content to multiple user roles (including custom ones); brand new database tables that set the stage for supporting multiple memberships for a single user; and more!

New PHP requirement: version 5.6 or higher

Version 3.0 now requires PHP version 5.6. This will allow us to upgrade some of our third party libraries, such as the Stripe library, and give us more flexibility in the future. Please make sure you’re using PHP 5.6 or greater before updating to 3.0. If you’re not sure how to upgrade your PHP version, you can get instructions from your web host.

Custom tables for memberships and customers

Once the 3.0 update is installed, you will be shown a prompt to migrate your membership data from user meta to our new custom database tables.

Version 3.0 migration prompt
Previously, all membership data was stored as user meta. This has worked fine for simple, single memberships, but is not feasible for supporting multiple memberships per user, which is our next big project for version 3.1. These tables also give us more speed and flexibility with querying, sorting, and searching membership information.

Membership data is now stored in two new tables with the following columns:


  • id
  • user_id
  • date_registered
  • email_verification
  • last_login
  • ips
  • notes
  • uuid


  • id
  • customer_id
  • object_id
  • object_type
  • currency
  • initial_amount
  • recurring_amount
  • created_date
  • trial_end_date
  • renewed_date
  • cancellation_date
  • expiration_date
  • payment_plan_completed_date
  • auto_renew
  • times_billed
  • maximum_renewals
  • status
  • gateway_customer_id
  • gateway_subscription_id
  • gateway
  • signup_method
  • subscription_key
  • notes
  • upgraded_from
  • date_modified
  • disabled
  • uuid

There is also a new wp_rcp_membershipmeta table for storing membership meta data.

With new tables, we also have new classes: RCP_Membership and RCP_Customer. The old RCP_Member class and associated helper functions have been deprecated, but they are fully backwards compatible.

You will also see new admin interfaces for managing customers and their memberships.

Membership details UI

No more “free” status

As part of the membership migration, we have also eliminated the “free” status for memberships. Previously this was used for free memberships and the “active” status was only used for paid memberships. This has often been confusing for customers, and rightly so! As of version 3.0, the “free” status has been merged into “active”. A membership is now considered active regardless of whether it is free or paid.

For backwards compatibility, all old functions will continue to work the same way they did in version 2.9 and earlier. For example, rcp_is_active() will only return true if a membership is both active and paid. However, new functions such as RCP_Membership->is_active() will return true regardless of whether the membership is free or paid.

Payment plans

Payment plans have been a popular request by customers wanting to give their members the option of paying the full amount upfront, or paying the amount in installment over the course of several months. If your membership content is more expensive and normally a one-off payment, it may be easier for some customers to pay smaller amounts over a greater period of time.

This feature introduces the ability to set a maximum number of renewals for membership levels, along with an “after final payment” action. As an example, you can create a membership level that is $100 per month and is limited to three renewals. This is a total of four payments (initial payment of $100, plus three renewals of $100 each). After the final payment, the subscription is cancelled and the customer is given lifetime access to the content. This might be an alternative to charging a single amount of $400 upfront.

Payment plan with 3 renewals

Learn more about configuring payment plans.

Restrict content to multiple user roles

The post restriction metabox now allows you to select more than one role when using role restriction. Instead of just allowing access to “editors”, you can choose to allow access to “editors” and “contributors”.

Select multiple roles in the "restrict this content" metabox

The [restrict] shortcode also now supports custom roles in the userlevel attribute. In the past, it only supported the built-in roles such as admin, editor, contributor, etc. Now you can enter a custom role, such as “shop_vendor”, or even a comma-separated list of multiple roles. For example:

[restrict userlevel="shop_worker,shop_vendor"]

One restriction message

Previously there were two restriction message settings: Free Content Message, and Paid Content Message. In 3.0, we’ve merged these two into one single “Restricted Content Message”. As restriction settings get more complex, so does figuring out whether content is free or paid. If you allow members of a free level to access Post A, but also let members of a paid level access Post A, is Post A free or paid? Which message should be used? What about if you restrict Post B to access level “4 or higher”, but there are both free and paid membership levels that grant that access level? This has caused confusion for many of our customers, and having one single restriction message brings more clarity.

Upon upgrading to 3.0 you’ll be asked to confirm your new “Restricted Content Message” setting.

The restriction message does have a filter, rcp_restricted_message. You can use this if you want to add custom code to once again create separate messages for free vs paid content.

Additional improvements

    • “Subscription Levels” have been renamed to “Membership Levels”.
    • Added a batch processing API.
    • Memberships can now be sorted by expiration date.
    • The Stripe API library has been updated.
    • The “Email IPN Report” feature has been removed.
    • 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.
    • The invoice template has been expanded to include fees, discounts, and credits that were applied to that payment.
    • The “Auto Add Users to Level” setting has been added to the system info file.
    • The PayPal Express confirmation screen has been updated to include additional information, including discounts, fees, and credits.
    • The login link text in the registration template has been adjusted.
    • object_id is now supported in RCP_Payments::count().
    • Improved error messaging when adding/updating membership levels fails.
    • Original join dates are now stored (in the wp_rcp_customers table).
    • “Prevent Account Sharing” setting now accepts a maximum number of simultaneous connections.
    • When a user account is deleted, associated recurring subscriptions are now automatically cancelled.

Notable bug fixes

  • Password reset links will now work with SendGrid click tracking.
  • RCP user meta is now removed during uninstall.
  • 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.
  • The admin bar is no longer hidden for users who have the “edit_posts” capability.
  • Under certain circumstances it was possible for rcp_get_ip() to return a CSV of IP addresses instead of a single IP.
  • Databases are now registered when switching sites on multisite.
  • Fixed a DateTime::__construct() fatal error in when signing up for a free trial.
  • 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).

Modified templates

The following template files have been edited. If you’ve overridden these, please compare with our changes to ensure your files continue to work as expected.

  • 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

Upgrade to version 3.0

Version 3.0 is available today. The update can be installed directly from the Plugins page for all customers with a valid license. Do not have a license yet or need to renew a license? Head over to the pricing page to purchase one or to your account page to renew an existing license.

Ashley Gibson

About the author: Ashley is the development lead for Restrict Content Pro. When not working on Restrict Content Pro, she enjoys weightlifting and reading.


  1. This is great news! I cannot wait for v3.1 either 😉 Love to idea of parallel memberships.

    You did mention 3.1 is the next big project so I assume it will be a few months away?

    Thanks for all the hard work.

    1. We’re very excited for 3.1 too!

      Yes it will be a few months away. I’m afraid we don’t have a more exact ETA yet. Adding support for the feature in the main plugin is actually quite easy now that the hard work has been done in 3.0, but we’ll have to update all our add-ons to support this as well (multiple groups in Group Accounts, multiple sites in Site Creation, etc.) and that will be quite challenging! That’s where most of the heavy lifting will be.

  2. That’s great!

    Does version 3.0 handle error messages for failed card payments on the registration page (as opposed to simply sending users to the default WP error screen)?

    I’ve been sitting on the fence about purchasing additional licenses, waiting for this feature to be added.


    1. At this time errors are still handled via the WP error screen. Changing this is on our to-do list but I’m afraid it didn’t make it into 3.0.

    1. That is something we may consider for the future but it’s not something we’re working on right now.

  3. Along with my previous question, are there plans to have “paid” customers automatically downgrade to “free” when their paid account expires or is cancelled?

    1. We would like to support Apple Pay in the future but I’m afraid we don’t have a timeline for that yet.

    1. Hi Justin,

      Restrict Content Pro doesn’t yet support multiple memberships for a single user, but this is something we’re working on for version 3.1!

      1. Is there a timeline for the release of 3.1? Love this plugin by the way…great work on 3.0!

  4. Congrats on 3.0!!

    Regarding the actual creation of “Custom User Roles” (by way of a plugin), is there a trusted go-to plugin you would recommend for this?

    Just wondering if one immediately comes to mind. If not, no worries at all.

    Rock on, RCP!


  5. I’m migrating 12,000 subscribers and it’s taken over 4 hours now.
    If the migration stops in the middle, will it continue??
    Are there any failsafes?

  6. The migration is putting the users username as first and last name.
    I need to roll back until this is fixed.

  7. I’m sorry, explain this to me as if I was a child. How do I upgrade? What “plugins” page are you talking about. The one on my wordpress dashboard? Because I don’t see any update option for my restrict content pro. The one on my account page under purchases? I can down load the latest version there but isn’t that for a fresh install not an upgrade? Or are you talking about the “Restrict” tab on my dashboard? Aka the page for the plugin. Because I still don’t see any upgrade options there.

    1. Yes, we are referring to the plugins page on your WordPress dashboard. Please make sure you have your license key entered and activated inside the plugin settings (Restrict > Settings).

      If you are still having trouble getting the update then please submit a support ticket here: We will be happy to walk you through this in more detail.

  8. Will conditional logic on the registration form be a part of 3.1? We need the functionality of Gravity Forms in the registration process in order to determine the membership pricing.

    1. What kind of conditional logic? If you’re referring to an entire form builder UI like Gravity Forms then I’m afraid that won’t be in 3.1. That is something we’d like to look into though.

  9. Did this new version do away with the [is_not_paid] shortcode? I really need this shortcode, and it is no longer working on my site after the update.

    1. I see you submitted a support ticket about this. I’ll assist you there. 🙂 The shortcode should still work but if there’s a problem then we’ll definitely get it fixed!

  10. The New version 3.0.2 deleted my Restrict database on WordPress. I had to restore a back version of my site to restore all my customer data. Using version 2.9.15 until this issue is resolved.

    1. After the update was installed it will have prompted you to run a database upgrade routine.

      Did you run that upgrade after installing 3.0?

Comments are closed.