Life Time Extra Credits Offer

*Add $100 or more to claim

Validity: Nov 24 - Dec 05, 2025

s2Member – Best Membership Plugin for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions

s2Member – Best Membership Plugin for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions

❤️ The best membership plugin! Easy and quick to use. Monetize your site selling unlimited memberships, single payment or recurring paid subscriptions …
Rating:
4.0
star-rating-1star-rating-2star-rating-3star-rating-4star-rating-5
Active Installations:
10000+
Last Updated:
Feb 15, 2025
WordPress Version:
4.2 or higher
Tested up to:
6.8

Powerful Membership Solution!

Easily protect and monetize your content with s2Member.

Flexible and Easy to Use

Quickly configure and customize your membership site with s2Member.

Get Paid Repeatedly

Enjoy the benefits of recurring payments for access to your site.

Excellent Support

Receive top-notch support from the s2Member team for all your membership needs.

v250214

  • (Pro) Enhancement: Improved coupon usage logging for better tracking.

  • (Pro) Enhancement: Added a new single-use per user option for coupons. Thanks to Carl Borsani for sponsoring this.

  • (Pro) Enhancement: Coupons can now be limited to specific pro-forms. Thanks to Carl Borsani for sponsoring this.

  • (Framework) Fix: s2Get can now handle s2Member’s custom profile fields. Thanks to Gerard Earley for reporting this.

  • (Framework) Fix: Updated the admin notice about the PayPal button encryption setting.

  • (Pro) Enhancement: Improved data handling in the Remote Operations API. Props to István.

  • (Pro) Enhancement: Improved validation of the template attribute in pro-forms and s2Member-List shortcodes. Props to István.

v241216

  • (Framework) Enhancement: Added extra attribute validation to the s2Get shortcode. Props to wcraft.

  • (Framework) Enhancement: Improved New User email preparation before send. Props to Hakiduck.

v241114

  • (Framework & Pro) Fix: An error could happen on PHP8 during Pro activation. Fixed in this release.

  • (Framework) Enhancement: s2Get shortcode can now be used to show s2’s current user constants. E.g. [s2Get constant="S2MEMBER_CURRENT_USER_DISPLAY_NAME" /] WP Admin > s2Member > API / Scripting > s2Member PHP/API Constants

v240325

  • (Framework) Fix: Some sites were getting a warning from v240315’s restriction improvement when the WP REST request doesn’t include a type or ID. Fixed in this release.See thread 11347

  • (Pro) Enhancement: Checkout success redirection URLs are now validated as safe with WordPress’ wp_validate_redirect. To use a domain different than the site’s, it can be allowed with wp’s filter allowed_redirect_hosts.

  • (Framework) Enhancement: Additional validation to prevent an invalid s2Member Level role during registration.

v240315

  • (Framework) Enhancement: Improved access restrictions applied to WP REST requests.

v240218

  • (Framework) Fix: PayPal button encryption default changed to “disabled”.

  • (Framework) Fix: Mailchimp interest groups integration wasn’t working correctly all the time. Fixed in this release.

v230815

  • (Framework) Fix: Added some missing functions to the list of conditionals allowed by default for s2If (e.g. current_user_days_to_eot_less_than, current_user_gateway_is). See also: https://s2member.com/kb-article/s2if-simple-shortcode-conditionals/#toc-5bb69568

  • (Pro) Enhancement: New s2If whitelist option for custom conditional functions to be allowed. s2Member Pro > Restriction Options > Simple Shortcode Conditionals > Whitelist

  • (Framework) Enhancement: Handle s2If conditional problems more gracefully. Instead of giving an error that prevents loading the rest of the page, it now just doesn’t display that s2If’s block, and enters a message in the error log (e.g. /wp-content/debug.log).

  • (Framework & Pro) Enhancement: Prevent output from s2If conditions, only true or false.

  • (Framework) UI: Update the Mailchimp example from Group Title to Group Category, to match Mailchimp’s current name in their settings. s2Member > API / List Servers > Mailchimp

v230808

  • (Framework) Fix: Potential security issue under rare circumstances. Fixed in this release.

  • (Framework) Fix: Mailchimp’s groups/interests were not transitioning correctly with the updated integration. Fixed in this release.

  • (Framework) UI: Added a notice about PayPal giving trouble with encrypted buttons recently, recommending to not encrypt them for now. You may need to disable button encryption, and allow non-encrypted payments. s2Member > PayPal Options > Account Details > Button Encryption

  • (Framework) UI: Brought back the “Expand All” and “Collapse All” buttons for the admin panels. See thread 10796

  • (Framework) UI: Updated the link to the PayPal IPN configuration.

  • (Framework) UI: Added link to PayPal’s IPN History page. s2Member > PayPal Options > PayPal IPN > More Information

  • (Pro) Fix: Stripe’s billing update pro-form gave an error sometimes. Fixed in this release. See thread 10752

v230530

  • (Framework) Enhancement: Updated the Mailchimp integration to v3 of their API. I made it so you shouldn’t need to change anything, it should work with your existing configuration. Still worth doing a test or checking that things are normal after the update, and report any issues you notice. See: thread 10666

v230504

  • (Pro) Fix: Stripe subscriptions weren’t using customer cards updated with the Billing Update pro-form. The subscription saved the first card, instead of defaulting to the card in the customer’s profile. This release fixes that. The card is not added to a new subscription anymore, only to the customer’s profile, and updating his profile’s card with the Billing Update pro-form, will also update the subscription so it uses it. Thanks to Jim Antonucci for his help with this.

  • (Pro) Enhancement: The Stripe Billing Update pro-form now includes a field for the cardholder’s name (i.e. Name On Card). Adding the name to the card will improve successful subscription charges. Thanks to Andy Johnsen for the idea.

v230425

  • (Framework) Fix: Fixed domain name format validation for custom profile fields.

  • (Framework) Fix: Fixes to markdown parser for PHP8 compatibility.

  • (Framework) Fix: Fixed HTML near AWeber’s API key field.

v230413

  • (Pro) Bug Fix: An error could happen on PHP8 during Pro installation in a multisite network. Fixed in this release.

  • (Framework) Bug Fix: An error could happen on PHP8 when saving an edited user profile. Fixed in this release.

  • (Framework) UI Enhancement: In the List Servers admin page, removed mentions of the AWeber email parser, which isn’t available any more.

v221103

  • (Framework) Bug Fix: Removed latest changes to gateway notification and return handlers, that were causing difficulties with member access in some scenarios.

v221031

  • (Framework) Bug Fix: Fix PayPal IPNs being ignored because a bug in the last release. After updating to this release, you may want to review your latest IPNs since updating to v221028, and re-send them from PayPal. See thread 10208

v221028

  • (Framework) Fix: Initialized some array keys to prevent PHP warnings in PayPal notify and return files. Thanks Greg M. for your help.

  • (Framework) UI: Widened the Logs viewer. Thanks Sim. See thread 10064

  • (Framework) UI: Framework auto-update is now allowed when Pro add-on installed.

  • (Pro) UI: The Pro updater now shows when a newer version available, not just when required.

v220925

  • (Pro) UI Enhancement: In ClickBank Options admin page, added note about keeping IPN encryption disabled.

  • (Pro) Enhancement: Removed ClickBank’s name from the notify, return, and success URLs, replaced with just cb. Kudos to Eduardo for telling me about this. See thread 9910

  • (Pro) Enhancement: Added a PayPal payment request ID to help prevent random/rare PayPal duplicate charges. Kudos to Nathan for his help. See thread 7999

  • (Framework) UI Enhancement: Admin page panels widened for larger displays.

  • (Framework) UI Enhancement: Simplified Getting Started and Getting Help admin pages.

  • (Framework) UI Enhancement: In PayPal Options admin page, updated paths and links to PayPal settings.

  • (Framework) Bug Fix: Removed the Security Badge’s link to the old Flash powered page on s2Member’s site.

  • (Pro) UI Enhancement: Small improvements to the Pro upgrader.

v220809

  • (Framework) Enhancement: New current_user_days_to_eot_less_than function for conditionals. Useful when you want to show a message to a user on his last days of access before the EOT time in his profile. E.g. [s2If current_user_days_to_eot_less_than(31)]Please renew your membership[/s2If]. Kudos to Felix for his help, see post 6783.

v220421

  • (Framework & Pro) Enhancement: Improved PHP compatibility to 8.1.

  • (Framework) UI Fix: More Updates link fixed.

v220318

  • (Framework) Enhancement: New current_user_gateway_is function for conditionals. Useful for sites using more than one gateway. E.g. [s2If current_user_gateway_is(stripe)] ...

  • (Pro) UI Fix: Removed “Image Branding” setting from s2’s Stripe options, not used in current integration.

v210526

  • (s2Member Framework & Pro) UI Enhancement: Started improving the admin interface. Lightened up the colors, and changed the layout a little bit.

  • (s2Member Framework) UI Enhancement: Added title tag to buttons to manage custom profile fields in admin, to improve use with screen-reader. Thread 8836

  • (s2Member Pro) UI Fix: Fixed typo in pro-form rrt attribute description. Issue 1204

  • (s2Member Framework) Bug Fix: Registration Date sometimes wasn’t formatted correctly with the s2Get shortcode. Thread 8730

v210208

  • (s2Member Pro) Enhancement: In the Stripe integration, cancelling a subscription in the last minutes of a period, may cause the invoice for the new period to remain there and still be charged later. Now s2Member Pro attempts to find a draft or open invoice for the subscription being cancelled, and void it. Thanks Alan for reporting it. See post 8386.

  • (s2Member Pro) UI Enhancement: Improved Stripe pro-form error message when trying to create a subscription with a bad card. Thanks everyone that reported it. See issue #1184, post 6043, and post 8386.

  • (s2Member Pro) Enhancement: Added the new action hooks ws_plugin__s2member_pro_before_stripe_notify_event_switch and ws_plugin__s2member_pro_after_stripe_notify_event_switch in the Stripe endpoint to allow customizations, e.g. new event handlers.

  • (s2Member Pro) UI Fix: Removed some leftover mentions of Bitcoin support in Stripe’s options.

  • (s2Member Pro) UI Fix: Removed a couple of deprecated shortcode attributes from the documentation for Stripe’s pro-form, leftovers from the old integration. Kudos to Debbie for bringing my attention to them. See post 8053.

  • (s2Member Framework) UI Fix: Fixed some broken links and video players in the admin pages.

  • (s2Member Framework) Bug Fix: Resolved a warning given when changing users role in bulk from the WP Admin > Users page.

  • (s2Member Server Scanner) Bug Fix: Updated the Server Scanner to remove some outdated warnings.

v201225

  • (s2Member Framework) Bug Fix: View Password icon WP’s login page was not displaying correctly. Kudos to Beee4life for reporting it. See issue #1187

  • (s2Member Framework and Pro) Enhancement: Refactored PHP’s deprecated create_function with anonymous functions. Kudos to Berry for reporting it, see post 6069

  • (s2Member Framework) Bug Fix: Added a check for empty return variable before trying to use it in paypal-utilities.inc.php.

  • (s2Member Framework) Bug Fix: Added checks for undefined indexes before trying to use them in paypal-return-in-subscr-or-wa-w-level.inc.php.

  • (s2Member Framework) Bug Fix: Added a check for undefined index before using it to define a couple of s2 constants. Kudos to Berry for reporting it, see post 8181

  • (s2Member Pro) Bug Fix: s2’s payment notification when creating a Stripe subscription, was being sent twice. Added a check to ignore the webhook for the subscription’s on-session first payment; s2’s webhook endpoint is for off-session events.

  • (s2Member Framework) Enhancement: Added a new hook for the payment notification on subscription creation or buy now payments.

  • (s2Member Pro) Bug Fix: Stripe paid trials were accumulating on failed payment attempts, causing a larger charge when it finally succeeded. Kudos to Alan for his help through the many attempts to fix this one, see post 7002.

  • (s2Member Pro) Enhancement: Stripe duplicate payments were happening randomly to a few site owners, apparently from bad communication between their server and Stripe’s. Added idempotency to prevent duplicates. Kudos to Alan and everyone in the forum that reported and gave details on this behavior, see post 7002

v200301

  • (s2Member Pro) Enhancement: Added “Powered by Stripe” to Stripe pro-form’s payment card field. Kudos to Josh, see post 6716.

  • (s2Member Pro) Bug Fix: Stripe subscription cancellations were not happening when they should. This release updates the API integration for it and fixes that behavior. Kudos to Matt for reporting it, see post 6909.

  • (s2Member Pro) Bug Fix: Updating the card with Stripe’s pro-form sometimes gave an incorrect “missing billing method” error. Kudos to Corey, see post 7058.

  • (s2Member Pro) Small fix: Removed Bitcoin mention next to Stripe in Gateways list. Missed it in v191022.

v200221

  • (s2Member Pro) Bug Fix: In some rare cases, another plugin loaded Stripe’s class before s2Member, so when s2 tried loading it there’d be an error. This release fixes the check for the class before trying to load it. See issue #1170

    Note: s2Member won’t have control over what version of the Stripe SDK was loaded by the other plugin. You’ll need to get that other plugin to have an up-to-date version. If you don’t have another plugin loading Stripe, this is not relevant to you.

  • (s2Member Pro) Bug Fix: When using a 100% off coupon, requiring no payment, the Stripe pro-form was still loading the card field and requiring it, preventing the free signup. That’s fixed in this release. See issue #1171

  • (s2Member Pro) Bug Fix: The Stripe pro-form, when given an invalid card, didn’t give a clear error message for it, and instead just “invalid parameter”. Now it shows the correct card error, making it possible for the customer to try a different card to complete the payment.

  • (s2Member Pro) Feature Update: The Indian Rupee was added to the list of currency symbols.

  • (s2Member Pro) Feature Enhancement: The s2Member Pro add-on, not being a regular plugin was not uploadable via the WP plugin manager. This made it necessary to FTP, which is complicated for some site owners. In this release I made it possible for the plugin manager to upload or remove the Pro add-on.

    Note: It still is not a regular plugin. The activation link or status in the plugins manager is irrelevant, but I couldn’t find how to remove it. s2Member Pro activates automatically when its version matches the Framework’s, and it’ll be mentioned next to the Framework’s version in the plugins manager.

v191022

  • (s2Member Pro) Feature Enhancement: The Stripe pro-forms can now handle 3D Secure 2 for Strong Customer Authentication, as required by the new European regulation that came into effect recently. Props to those in the beta testing group, especially Brice and Felix. See thread 5585.

  • (s2Member Pro) Feature Enhancement: The Stripe pro-form now has the card field inline, instead of opening a modal to enter it. Before it required clicking the link to open the modal, enter the card details, submit that, and then submit the pro-form. Now you enter the card details as part of the pro-form. See issue #588.

  • (s2Member Pro) Stripe Integration Updates: Upgraded the Stripe PHP SDK from v1.18 to v7.4.0, and the API from 2015-07-13 to 2019-10-08. Upgraded the integration from the Charges API to the latest Payment Intents API. Upgraded the card input from the old Stripe Checkout modal, to the new Stripe.js and Elements.

  • (s2Member Pro) Optimization: Stripe’s JavaScript now only gets included if the page has a Stripe pro-form.

  • (s2Member Pro) Removed Stripe Bitcoin: Stripe dropped Bitcoin last year, it’s not available anymore. This update removes the Bitcoin options and mentions from the s2 admin pages.

  • (s2Member Pro) Bug Fix: Subscriptions without at trial were showing a “trialing” status in Stripe for the first period. This behavior has now been solved. It will only say trialing when you set a trial period (free or paid) in your Stripe pro-form shortcode. See issue #1052.

  • (s2Member Pro) Bug Fix: The Stripe pro-form installments via the rrt shortcode attribute were charging an extra payment before ending the subscription. There was an error in the time calculation for this. This is solved in this release. Props to Brice. See thread 5817.

  • (s2Member Pro) Bug Fix: Some payments through the Stripe pro-form were creating a new Stripe customer when the user was already a customer. The Stripe customer ID was not being saved correctly in the user’s profile. This is solved in this release. Props to demeritcowboy for reporting it.

v190822

  • (s2Member) PayPal Integration Update: PayPal deprecated the subscription modification button. Using the old possible values for this, now gives an error on PayPal’s site. This button has been removed from the PayPal Standard integration in s2Member. Props to Tim for reporting it, see forum thread 5861, and issue #1157.

  • (s2Member) Bug Fix: PayPal would sometimes return the customer without the Custom Value expected by s2Member, incorrectly triggering an error. A small delay has now been added when needed to wait for PayPal to provide the missing value, so that the customer is met with the correct success message on return. Props to Josh Hartman for his help. See forum thread 5250.

  • (s2Member) Bug Fix: Google’s URL shortening service has been discontinued. The s2Member integration with it was removed in this release. Props to Felix Hartmann for reporting it.

  • (s2Member) Feature Enhancement: The popular URL shortening services have been abused in spam emails, and this can cause your site’s emails with shortened signup URLs to end up in the spam folder. It’s now possible to disable URL shortening when trying to avoid this problem. Props to Felix Hartmann for suggesting it. See forum thread 5697.

  • (s2Member Pro) New Feature: It is now possible to use a custom URL shortener other than the defaults in the s2Member Framework. This is particularly useful to use YOURLS for your links, making them unique to your site, looking more professional and avoiding the spam filters issue mentioned above. For more info see this forum post.

v190617

  • (s2Member Pro) Authorize.Net Hash Upgrade: Authorize.Net announced the end-of-life for their MD5 Hash in favor of their new SHA512 Signature Key. Support for this has been added to s2Member Pro. The MD5 Hash is not provided by Authorize.Net any more, so the field for it in s2Member has been disabled. Props @krumch for his work. For further details see forum thread 5514.

    Note: For those that already used the MD5 Hash in their configuration, it is kept there and will keep working while Authorize.Net accepts it, which will not be much longer. It’s important to update your integration with the new Signature Key. Once you have your Signature Key in the s2Member configuration, it will be favored over the old MD5 Hash._

  • (s2Member Pro) Bug Fix: The multisite patch for wp-admin/user_new.php wasn’t finding the code to replace because of changes in the latest releases of WordPress. It has now been updated, as well as the instructions in the Dashboard for those that prefer to apply it manually. Props @crazycoolcam for reporting it. For further details see Issue #1132.

    Note: If you already had patched this file in the past, it’s recommended that you remove the previous patch restoring it to the original file, and let s2Member Pro patch it again now, otherwise you risk getting it patched over the previous one and ending up with errors. After the new patch, please review that file to verify that it’s correct._

  • (s2Member Pro) Bug Fix: The search results for s2Member-List were not being ordered as specified in the orderby attribute when this was a field from the usermeta table in the database, e.g. first_name, last_name. This is now fixed and working correctly. Props to @stevenwolock for reporting it. For further details see Issue #1103.

  • (s2Member) WP 5.2 Compat. Enhancement: s2Member has been tested with WP up to 5.2.2-alpha. With WP_DEBUG enabled, only one “notice” was found. In wp-login.php it said ‘login_headertitle is deprecated since version 5.2.0! Use login_headertext instead.’ This release now uses login_headertext and doesn’t get that notice anymore. Props Azunga for reporting it. See forum thread 5962.

You can find the full changelog here.

one of the best

By joshmacd on August 10, 2024

easily one of the best and most customizable membership plugins for wordpress. been around for ages and i still use it.

Audit your memberships monthly

By Jason Lau on May 27, 2024

I have a love/hate relationship with this plugin. There are some things that I love about it, and some things that I loathe about it.

Most importantly, it fails at its primary function of managing paid memberships.

I had been using this plugin confidently for many years, and I just assumed it was doing what it was supposed to do.

I recently audited my memberships versus payments for the first time, and I was shocked to learn that I have lost a lot of money. Many of my website's users were getting free service; many of them for years, costing me thousands of dollars in lost income and stolen service!

Turns out, this plugin hasn't been downgrading memberships when users miss payments or cancel their subscriptions.

s2member doesn't maintain any payment records whatsoever. Therefore, it's not easy to audit subscription payments versus memberships.

I now audit my site every month.

A one-stop solution for Memberships!

By Kazam Creative (goldenagemedia) on April 15, 2024

We've been able to build a complete membership system with recurring payments using the s2member plugin and so far loving the capabilities of it! There is so much to customise and manipulate thanks to the plethora of settings and shortcodes available, if our client asks for something to be added to their website this plugin has been able to do it, without the need to source another plugin or alternative. Support is awesome as well - I've had many questions answered recently in a pretty quick turnaround. Definitely 5 stars every day for this. I would highly recommend you get the Pro version as well, it's a one-off payment which sold us on buying it, rather than another system where we have to pay for it every month.

Absolutely Great Membership Management Plugin

By swrawebcmte on April 5, 2024

After playing around with multiple membership management plugins, I discovered this one - s2Member. I like many, many, aspects of this and the best part is that the core framework is free to use. During my testing I found that for our retiree association website, this was ideal. The thing that made me a big fan was how quickly this volunteer run support was with their timely replies. Needless to say, the paid version has many features, and the amount you pay (although slightly on the higher side - from my personal perspective) is for lifetime updates and not the yearly renewals that other developers charge. Thanks very much s2Member and keep up the good work.

Powerful tool and great support

By metricmedia on March 22, 2024

This does everything we need it to do for the membership-driven site we manage. And the support has been incredible (note: we have the paid Pro version). Highly recommended.

Very usefull plugin but warning

By bernard92000 on March 17, 2024

Hello,

Thank you for this very usefull Plugin.

Can you fix the warnings on the last Version 240315 (visible on the Workpress dashboard, PHP 8.1 & Wordpress 6.4.3).

Warning: Undefined array key 2 in ./wp-content/plugins/s2member/src/includes/classes/security-rest.inc.php on line 45
Warning: Undefined array key 3 in ./wp-content/plugins/s2member/src/includes/classes/security-rest.inc.php on line 46

Thank you.

Clear Set Up Guidelines

By colinanthony on March 16, 2024

Ive been using S2 Membership for a while to control my premium content for members. The PayPal integration was straightforward and clearly explained in the help files and videos.
The set up videos simplified the whole process. It's been working for a while now without any issues.
I recently encountered a small issue on version upgrade and the tech support was speedy and accurate. The solution was provided really quickly along with some friendly advice as to how to avoid it in the future. Not all plug in developers are like this. Highly recommended - Colin

Excellent Support

By Roger Correia (correiar) on September 7, 2023

Cristián Lávaque responded in a timely manner to my issue and stayed with it until it was resolved to my satisfaction. Definitely went above and beyond! Thank you (Merci beaucoup).

Excellent Plug In and Service

By larrybenitz on July 3, 2023

We've use S2 Member for a number of years. I recently had an issue and submitted a request but mistyped my email address. Cristián searched me down through alternative email addresses and provided a reply that solved my issue. Excellent service and a solid membership plug in.

Excellent timely support

By joshieboy on July 2, 2023

Cristián was very prompt with his feedback and his service was excellent. The issue was also resolved in a timely manner.

Try other plugins too!

WP Fusion Lite – Marketing Automation and CRM Integration for WordPress

WP Fusion Lite synchronizes your WordPress users with contact records in your CRM or marketing automation system.

Try Demo More Details

WP-Members Membership Plugin

The original membership plugin with content restriction, custom registration, and more.

Try Demo More Details

Content Control – The Ultimate Content Restriction Plugin! Restrict Content, Create Conditional Blocks & More

Unleash your WordPress content's potential! With Content Control, restrict your content, pages, posts, widgets, and even individual blocks with p …

Try Demo More Details
Screenshots
Author Site Author Site

Try s2Member – Best Membership Plugin for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions With InstaWP

Contact Sales

Reach out to us to explore how InstaWP can benefit your business.