=== s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions === Plugin Name: s2Member Framework Plugin URI: https://s2member.com/ Tags: membership, content restriction, paid subscriptions, members only, paid access Version: 260508 Stable tag: 260508 Tested up to: 7.0-RC2-62327 Requires at least: 4.2 Requires PHP: 5.6.2 Tested up to PHP: 8.4 License: GNU General Public License v2 or later. Contributors: WebSharks, JasWSInc, raamdev, clavaque, eduan Author: s2Member Author URI: https://s2member.com/ Donate link: https://s2member.com/donate/ Beta link: https://s2member.com/beta-testers/ Forum URI: https://s2member.com/r/forum/ Privacy URI: https://s2member.com/privacy-policy/ Changelog URI: https://s2member.com/changelog/ Video Tutorials: https://s2member.com/r/s2member-videos/ Knowledge Base: https://s2member.com/kb/ More Updates: https://s2member.com/category/news-updates/ Newsletter: https://s2member.com/r/subscribe/ PayPal Pro Integration: https://s2member.com/r/pp-account-types/ Text Domain: s2member Domain Path: /languages ❤️ Excellent membership plugin! Easy, quick, flexible. Monetize your site with memberships and subscriptions. Protect content instantly and securely. == Description == ❤️ **Excellent membership plugin!** Over 15 years of experience, development, releases... Still going and growing! **Start your membership profits!** Build your tribe, gather your followers, enroll your students, bring in your clients! 💵 Enjoy the benefits of getting paid repeatedly for access to your site! ⭐⭐⭐⭐⭐ _**Brilliant** "So glad I found this. It works brilliantly for our needs... love the seamless integration with PayPal. Everything we need. Thank you so much for creating this!" -[zarverk2000](https://wordpress.org/support/topic/brilliant-1268/)_ = The best way to make money from your WordPress site! = 🤩 Sell **unlimited memberships**, turn free subscribers into members (_subscriber to member → s. 2 member → s2Member_), with a single payment or recurring payments subscriptions. **Easy and quick to use.** Protect your membership content in a moment, and a moment later be ready to get payments for member access! **Easy to configure and very flexible.** Protect the whole site, nothing, or just parts, even member files for paid downloads! 👉 Install s2Member now and **make money!** 😀 https://youtu.be/qlKn-I-0W6U ⭐⭐⭐⭐⭐ _**So much capacity & great support** "I’m a novice and was able to quickly figure it out. When I got stuck I go to the support forum and Cristian is there with a quick answer to get me going again." -[blueruck](https://wordpress.org/support/topic/so-much-capacity-great-support/)_ ⭐⭐⭐⭐⭐ _**The very best plugin and support service** "Great plugin, neat, easy to configure, and with interesting security features. A special mention to Cristian whose support is awesome, fast, clear even to free members like myself" -[aflorarte](https://wordpress.org/support/topic/the-very-best-plugin-and-support-service/)_ **Packed with features**, but not required to use them all, just those you want. Some of them: ➡️ Member user levels and custom access capabilities ➡️ Membership content protection (post, page, category, tag, etc) ➡️ Protect anything served by WP (post types, URLs) ➡️ Member file protection (sell downloads) ➡️ Prevent member account sharing (limit IPs, simultaneous logins) ➡️ Protect accounts (limit failed login attempts) ➡️ Cool security/trust badge with your domain ➡️ PayPal Standard buttons for membership payments (more in Pro) ➡️ Automatic member access demotion at end of paid access time ➡️ Tracking software integration (affiliates, etc) ➡️ Email list services (Mailchimp, etc) ➡️ Notifications (signups, payments, etc) ➡️ Integrate with bbPress, BuddyPress for member communities ➡️ Compatible with any well coded theme (Elementor, Divi, etc) ➡️ Customize the WP login/registration look ➡️ Custom redirection after member login ➡️ Create custom profile fields for member accounts ➡️ Customize the user welcome email ➡️ And more! 👉 Install and start using s2Member now! 🤩 ⭐⭐⭐⭐⭐ _**Very Powerful Membership Plugin** "This membership plugin does a lot and has many, many configuration options to achieve whatever you want... I received extremely quick and reliable support." -[liltrucks](https://wordpress.org/support/topic/very-powerful-membership-plugin/)_ ⭐⭐⭐⭐⭐ _**Simple, Compatible, Secure, and Versatile!** "We are seriously impressed with this plugin and we highly recommend it... We have not found ANY limitations to what we are trying to accomplish... a very smooth process... straight-forward and user-friendly!... exceeded our expectations!" -[tips4gamers](https://wordpress.org/support/topic/simple-compatible-secure-and-versatile/)_ ⭐⭐⭐⭐⭐ _**Excellent plugin** "This plugin does everything it says on the box. It does it well... the functionality is absolutely spot on. The developers/maintainers are also active and helpful. Totally recommended!" -[richardfoley](https://wordpress.org/support/topic/excellent-plugin-5188/)_ ⭐⭐⭐⭐⭐ _**Best Membership Plugin I’ve Used** "I switched to s2 Member around 3 years ago after trying a few plugins. I found these other plugins inflexible and difficult to configure... Well worth investigating if you want a robust membership solution." -[rnwhalley](https://wordpress.org/support/topic/best-membership-plugin-ive-used/)_ 🤖 Not needed to know any PHP code or be a developer. Only code needed is copy-paste wp shortcodes, like for the paypal buttons... But is also developer-friendly to customize your installation if wanted. = Some reasons to get s2Member Pro = ✅ Membership content dripping ✅ Stripe, PayPal Pro, Authorize.Net, ClickBank ✅ On-site one-step checkout with pro-forms (Stripe, PayPal, Auth.Net) ✅ Unlimited membership levels ✅ Membership renewal reminder emails ✅ Single-step member registration and payment with pro-forms ✅ Custom redirection after payment ✅ Coupon codes and gift/redemption codes ✅ Custom member offer redirections after login ✅ Pro API for new integrations ✅ Public members directory ✅ Members bulk import/update/exporter ✅ Multisite network support ✅ Login and registration forms to use in pages/posts 👉 [Click here for more](https://s2member.com/features/) 🙂 ⭐⭐⭐⭐⭐ _**The Best Membership Plugin** "I have built with most Membership plugins and literally dozens using S2 Pro and I can tell you, bar none it is the best of all of them. Extremely powerful, anything you might want to do it can do... I highly recommend you try it out." -[antwoords](https://wordpress.org/support/topic/the-best-membership-plugin-5/)_ ⭐⭐⭐⭐⭐ _**Excellent plugin & top support** "We’ve used s2member pro on a few projects now & find it has met all our membership needs. Most impressive has been the support. Excellent communication, knowledgeable, friendly and super patient 🙂" -[aaee6](https://wordpress.org/support/topic/excellent-plugin-top-support-3/)_ ⭐⭐⭐⭐⭐ _**Awesome Support** "I’ve been using s2Member for 9 years... Amazing support of a high-end plugin and much appreciated. This is one of the reasons I stick with s2Member. Support has always been great!" -[graphichome](https://wordpress.org/support/topic/awesome-support-712/)_ ⭐⭐⭐⭐⭐ _**Wonderful Support** "Above and beyond. I’ve used this plugin for over ten years with various clients and whenever I need help, they’ve helped find a solution." -[germars](https://wordpress.org/support/topic/wonderful-support-68/)_ The free s2Member Framework integrates with PayPal Website Payments Standard (also free). Sell "Buy Now" or Membership access to your site. Restrict access to Roles, Capabilities, Posts, Pages, or anything else in WordPress. Protect your WordPress Posts, Pages, Tags, Categories, URIs, BuddyPress, bbPress, and even portions of content within Posts, Pages, themes, plugins. **Easily configurable and highly extensible.** You can even protect downloadable files and streaming audio/video. Store files locally, or use s2Member's integration with Amazon S3/CloudFront. s2Member is powered almost entirely by WordPress shortcodes, making advanced integrations quick and easy. Sell recurring (or non-recurring) subscriptions with lots of flexibility. Or sell "Buy Now" membership access in various ways. You can also sell specific Posts/Pages, sell member access to file downloads, or sell members Custom Capabilities that provide highly configurable access to specific portions of your content. 👉 Install now s2Member and **start making money!** 😀 == Installation == **NOTICE:** For help with s2Member Pro, please use [our forum](http://s2member.com/r/forum/). = s2Member is very easy to install = Just like any other normal plugin: - From the WP Admin's [Plugins Add New Screen](https://wordpress.org/support/article/plugins-add-new-screen/). - Or via FTP upload the `s2member` folder from the zip to your `/wp-content/plugins/` directory. - Activate it from **Plugins** page in your WordPress Admin. Here's a [quick-start video](https://www.youtube.com/watch?v=qlKn-I-0W6U) for a simple basic setup to get you started. = See also = [Detailed installation/upgrade instructions](http://s2member.com/installation/). = Is s2Member compatible with Multisite Networking? = Yes, requires s2Member Pro for Unlimited Sites. After you enable Multisite Networking, with s2Member Framework and Pro active, navigate to `s2Member → Multisite (Config)` in the Dashboard on your Main Site. == Screenshots == 1. s2Member Screenshot #1 2. s2Member Screenshot #2 3. s2Member Screenshot #3 4. s2Member Screenshot #4 5. s2Member Screenshot #5 6. s2Member Screenshot #6 7. s2Member Screenshot #7 == Frequently Asked Questions == **NOTICE:** For help with s2Member Pro, please use [our forum](http://s2member.com/r/forum/). = Is s2Member compatible with Multisite Networking? = Yes, s2Member Pro for Unlimited Sites is compatible with Multisite Networking. After you enable Multisite Networking, with s2Member Framework and Pro enabled, navigate to `s2Member → Multisite (Config)` in the Dashboard on your Main Site. = Where can I find more information? = * s2Member FAQs: * Knowledge Base: * Video Tutorials: * Community: * Codex: = Translating s2Member = Please see: == Upgrade Notice == = v260508 = (SECURITY RELEASE) UPGRADE IMMEDIATELY. v260215 included a CRITICAL VULNERABILITY fix, and you shouldn't wait any longer to update if you're behind. == Changelog == = v260508 = - (Framework) **Fix:** PayPal Checkout cancellation shortcodes now keep `output="anchor"` clickable for logged-out visitors. Only `output="button"` requires the member to be logged in. See [thread 13450](https://f.wpsharks.com/t/13450) - (Framework) **Fix:** PayPal Checkout no longer aborts if the customer's IP address changes during checkout. IP mismatches are logged, but valid checkouts continue processing. - (Framework) **Fix:** Prevent false Auto-EOT demotions when a stored Auto-EOT time is `0`, and improve logging for invalid Auto-EOT values. See [thread 13412](https://f.wpsharks.com/t/13412) - (Framework) **Fix:** Prevented a PHP 8.1+ deprecation notice while reading registration times when the stored value is missing or false. - (Framework) **Improvement:** Improved PayPal Checkout button loading with a client-side fallback when the PayPal SDK is missing from the final page output. - (Pro) **Fix:** Prevented deprecation notices on newer PHP versions, which could interfere with automatic login/redirects after Stripe checkout. - (Pro) **UI:** Improved cancellation pro-form submit button text. Cancellation forms now say “Cancel Subscription” instead of the generic “Submit Form”. See [thread 13438](https://f.wpsharks.com/t/13438) = v260410 = - (Framework) **Fix:** Reduced the upfront requirements for processing PayPal Standard `subscr_cancel` IPNs so valid cancellations are not ignored when supporting values are missing, stale, or non-membership-specific. - (Framework) **Fix:** Prevent incorrect s2Member notifications in some PayPal Checkout cases where several webhooks are received about the same subscription. - (Framework) **Fix:** Prevent duplicate processing and notifications when PayPal sends both a webhook and an IPN for the same PayPal Checkout subscription payment. - (Framework) **Fix:** Added subscription modification cancellation support to the Framework, which was previously only available in the Pro addon. - (Pro) **Fix:** Made subscription modification cancellation gateway-aware, preventing orphaned active subscriptions when a member starts a replacement subscription through a different gateway. - (Pro) **Fix:** Prevented rare cases where subscription modification processing could cancel the newly created subscription by mistake. - (Pro) **Fix:** Improved Stripe customer lookup during checkout retries by falling back to email when the stored Stripe customer ID is missing, stale, or no longer retrievable. = v260325 = - (Framework) **Fix:** Improved PayPal Checkout webhook idempotency to prevent duplicate processing during repeated/concurrent webhooks, while preserving normal behavior. - (Framework) **Fix:** Resolved a PayPal IPN issue where some `subscr_cancel` notifications were ignored because the cancellation handler failed before it had fully identified the recurring subscription. - (Framework) **Improvement:** Added IPN Signup Var lookups for missing PayPal cancellation IPN values like `period1`, `period3`, `item_number`, `item_name`, and `payer_email`, preventing valid `subscr_cancel` notifications from being ignored. - (Framework) **Improvement:** Moved s2Member's translation files to `/languages`, following the WordPress standard, and updated `.mo` loading to support that directory while continuing to support the standard and legacy WordPress locations. - (Framework) **Improvement:** Hardened PayPal Standard IPN endpoint response handling and added debug logging for hosts/security layers that incorrectly return HTTP 403 after successful processing. - (Framework) **Enhancement:** Added `ukpostcode` as an expected-value option for Custom Registration/Profile Fields, with matching server-side and client-side validation for UK postcode input. The validation is designed to be reasonably broad, including standard UK formats and related special cases. Thanks to Gerard Earley for contributing the patch. See [thread 12200](https://f.wpsharks.com/t/12200) - (Framework) **Enhancement:** Added a new __General Options > s2Get Shortcode__ setting to allow `user_id` for whitelisted user fields, defaulting to current-user. Also updated the s2Get KB article accordingly. - (Pro) **Fix:** Updated Stripe card charge and PaymentIntent requests to use `statement_descriptor_suffix` instead of `statement_descriptor`, fixing card-payment errors where Stripe no longer accepts `statement_descriptor` for card payments. - (Pro) **Fix:** Corrected Stripe subscription checkout so resumed PaymentIntent flows no longer go through the wrong intent-status handler. - (Pro) **Fix:** Stripe now stops cleanly after card declines, instead of continuing into secondary intent/payment-method errors. - (Pro) **Fix:** Improved Stripe recurring-payment setup to better support future-charge authorization requirements, fixing failures in countries with stricter payment rules, including India. - (Pro) **Fix:** Stripe now updates recurring default payment methods only after a successful intent result, instead of earlier in checkout. - (Pro) **Fix:** Billing-update SetupIntent creation failures in Stripe now return the proper error response. - (Pro) **Fix:** Prevent duplicate/retried Stripe webhook events from being processed more than once, including near-simultaneous retries of the same Stripe event ID - (Pro) **Fix:** prevent Stripe billing modification/replacement from triggering EOT behavior for the cancelled old subscription while s2Member is still updating the member account with the new subscription. - (Pro) **Fix:** Removed a trailing-comma syntax issue in Stripe subscription update code that could cause PHP compatibility errors on older supported PHP versions. - (Pro) **Fix:** s2Member now cleans up incomplete subscriptions left behind by failed 3D Secure authentication attempts during Stripe checkout, and gives the customer a more clear payment failure message. - (Pro) **Improvement:** Added dedicated s2 Stripe log entries for non-fatal failures while updating the default payment method after successful intent completion. = v260312 = - (Framework) **Fix:** Prevent a PHP 8.1+ deprecation notice from appearing above the admin Users table in some cases. - (Framework) **Security:** Improved debug log sanitization. - (Framework) **Improvement:** PayPal Checkout credential test and OAuth failure log entries now include client_len_hash / secret_len_hash values (length_hash, e.g. 80_4d9a7c1b2e8f4a21) to help compare attempted credentials during troubleshooting without exposing raw values. - (Framework) **Enhancement:** Added a new _No-Cache Headers Behavior_ option under _General Options > Performance & Caching_, making no-cache behavior configurable from the admin UI. It includes: - `Always` mode, the legacy safe default that prevents caching site-wide in case user-conditional output appears. - `Selective` mode, which was previously available only through a filter and may improve caching for guests, but can miss some runtime no-cache triggers. - The new `Evaluative` beta mode, which evaluates the page with more runtime information and may allow more pages to be cached safely for guests. - An optional debug header to help troubleshoot no-cache behavior. - (Framework) **UI:** Clarified the Download Options text to explain that unique download limits are counted in the last X days (rolling window), reducing confusion about whether the limit resets on fixed calendar dates. - (Framework) **UI**: Improved the PayPal Checkout credentials test failure message. - (Framework) **UI:** Fixed the PayPal button encryption admin notice so that it shows only to administrators in the WP Admin area, not non-admin users. = v260301 = - (Framework) **Bug Fix:** Fixed mismatched `