Move from s2member to Optimizemember

OptimizeMember has exactly the same license files inside the plugin as - actually not even error checked as for example the domain does not exist and they simply CTRL-F exchanged s2member with optimizemember and S2Member with OptimizeMember and so forth…
And it is also comprised of a pro folder and a free folder (just that they packed the pro folder inside a subfolder of the free folder - instead of toplevel.

Actually as it is inside the free folder, here a case could actually be made for Optimizemember Pro being fully GPL - as you need to dive town into the relevant folders to find out about the split license.

It’s even simply wrong as they have not updated some things:

Copyright: © 2009 optimizePress, Inc. ( coded in the USA )

This WordPress plugin ( optimizeMember Pro ) is comprised of two parts:

(1) Its PHP code is licensed under the GPL license, as is WordPress itself.

(2) All other parts of ( optimizeMember Pro ); including, but not limited to:
the CSS code, some JavaScript code, images, and design;
are licensed according to the license purchased.

Unless you have our prior written consent, you must NOT directly or indirectly license,
sub-license, sell, resell, or provide for free; part (2) of the optimizeMember Pro Module;
or make an offer to do any of these things. All of these things are strictly
prohibited with part (2) of the optimizeMember Pro Module.

Your purchase of optimizeMember Pro includes free lifetime upgrades via
( i.e. new features, bug fixes, updates, improvements ); along with full access
to our video tutorial library:

Thanks for the update @openmtbmap. I couldn’t see those terms embedded in the software because I can’t look at the optimizePress software since it is proprietary :slight_smile:

One could certainly put a case forward that the license in the software overrides the T&Cs signed when purchasing the product but it would be an argument that would have to be fought in court…lawyers dream. And the T&Cs state that it would be arbitrated in the U.K. so if you live anywhere else in the world that’s an expense not worth the risk for this software. I tend to stay away from any WordPress software with ambiguous legal terms. This would be one of those cases. Keep in mind the following optimizePress term makes losing a challenge expensive:

“In the event of litigation between you and us concerning the Software or Documentation, the prevailing party in the litigation will be entitled to recover attorney fees and expenses from the other party.”

Based on my experience with lawyers and patent / contract law the purchase T&Cs are more recent and are accepted by you when you purchase the software which is before you get to read the software license terms. In any case its sloppy legals and since they are the Copyright Owner and the purchase T&Cs include the following three clauses it is likely, in my opinion, that the courts would side with Optimizemember :

“Carefully read the following license agreement. By visiting this website and purchasing our software you accept and agree to be bound by this license agreement and its terms. If you do not agree to this license, we ask that you do not make any further use of our website or services and leave our website.”

“You understand that breach of any of the terms listed here are grounds for immediate termination of your account and forfeiture of any licenses without refund or recourse.”

“This written license agreement is the exclusive agreement between you and us concerning the Software and Documentation and supersedes any prior purchase order, communication, advertising or representation concerning the Software.”

So the way the terms are stacked anyone purchasing the software knows in advance that they are purchasing proprietary software. The fact that the software sloppily includes cut&paste terms from the 2013 S2Member fork is something you learn after you already agreed to terms. The software terms do not include a term that overrides all previous agreements…the T&Cs agreed to on purchase do.

For an individual purchasing Optimizemember for their own use and content to pay a yearly fee these are all non-issues. If you are a Developer / Designer / Agency managing client sites these legals can be a barrier to your fixing issues your clients want fixed in a timely manner but only if optimizePress chooses not to address the issue once you raise it with them via their support channel.

My company is a Managed Service provider so if there are any issues of import to our clients they need to be addressed immediately so our software stack must be based on 100% opensource. S2Member was the one exception to the rule we made and for which we are now paying the price. So we’ll fork the open-source S2Member and backfill for the few proprietary features we chose to use.

With the details I provided and your additional details people can make an informed decision and that’s as good as it gets I think. Thanks for your additional license details. It is much appreciated.

Well all the PHP and .js has to be GPL anyhow. Also when you buy they specify the terms for OptimizePress - NOT Optimizemember! I would alway say that the license info that is closes - e.g. same folder is overriding license info that is more general.
Also you cannot revoke GPL - and 99% of Optimizemember is identical to s2member anyhow.
Furthermore - I would say in most cases you do not need to change the underlying plugin code, but just write additions as mu-plugin.

Yeah and see you point - I think if you base on the free s2member - there is no need for Optimizemember at all. The interesting stuff - the files for Thrivecart integration and the custom mods are largely not GPL as far as I can see.

ACTUALLY - I do wonder if ThriveCart really struck a deal with s2member back then, or if they just copied the GPL parts and never paid a cent to s2member. In some aspects it seems like this to me. Exactly those non GPL parts of s2member pro are the files that are different.

GPL is an access-rights license that qualifies how you avoid breaching Copyright. On its own it is very open. But you can assign another license that overrides the GPL license terms especially in the areas of distribution. Then it’s up to the courts and lawyers to decide which takes precedence under which circumstances. You can certainly re-license GPL software it just will not retrospectively apply to the pre-re-licensed software. Which I think is your point and also would explain why you said it looks like that part of the Optimizemember software has not really been touched since it was forked in 2013.

I’m not arguing against your interpretation…just making sure everyone makes their decisions with all the info. I’m sure you will agree it would be nicer if WordPress plug-in / Theme companies made the effort to have clean legals. At least then we would all know where we stand.

OptimizePress legals are messy. I don’t like messy legals. Makes me nervous. Also makes me wonder how much energy they are putting into software upgrades and management controls if these cut & paste software terms are still in the code 5 years after the fork!

As you said…most of the interesting stuff is in the S2Member Free. The only reason we went to the Pro version was for the Stripe plug-in, AWS S3-based file protection and the video-streaming protection all of which are on the hairy edge of not working. So, time to fork, fix S2Member Free and integrate with suitable replacements for the Pro features. Should be fun :slight_smile:

well as wordpress is GPL - it is I think pretty much defined that any PHP and .js files of plugins and themes have to be GPL - because they are always based on Wordpress. So the free part plus the PHP/.Javascript should be no problem to do whatever you are allowed with it under GPL.
Nearly all of the gateway stuff on top is licensed according to the gateways (and looks mainly like copy/paste from the payment gateway reference kits anyhow - better to only look at it but fetch a new copy from paypal/stripe)

Would be great if you could share your s2 fork on github or sell a fork. I do have much more trust in you than in another of the proposed forks.

I think I will switch today my smaller website to OPM for production use - together with Thrivecart. Let’s see how it goes.

Been through this when I forked MySiteMyWay…WordPress license ONLY requires that plugins and themes have GPL licensed PHP (it’s because the core API is licensed GPL). I confirmed that with WordPress and Envato. That’s why Envato and many commercial plug-ins have a split license that only covers the PHP. Which is why I don’t use Envato themes or plug-ins in my client sites.

My fork will be public under GitLab. I will post it here when it is up in a few weeks.

Let us know how you go with OPM + Thrivecart.

Some more things to adapt —

hunt through all of your plugins and mu-plugins to change s2member to optimizemember (best open all files at the same time where there could be things - so you don’t have to do this again and again - watch out that you always get the case right. s2member and the CASE is simply rubbish - sadly optimizemember did simply copy over the case sensivity.

Also I think you best forward

Otherwise your Stripe subscriptions will get lost.

I just ported over the live site - and did not activate ThriveCart yet - however I noticed the Stripe pro-forms are not correctly loading. What the heck. I also tried with default wordpress theme. Well let’s see. Otherwise I think everything is working. Have to wait for paypal IPNs to come in. Did take me about 2 hours downtime - with better preparation maybe 30minutes - but mind my website is pretty big - and I had problems search/replacing all the s2member variations correctly (if over 900 in one go - it just went blank so it took me much more time). Also converting the users took like 10minutes for the better search and replace plugin.

BTW - is this nginx rewrite correct? I hate how nginx handles them as I’m always too stupid to get the reg-ex write:

location / {
rewrite ^/?s2member_paypal_notify=1 ^/?optimizemember_paypal_notify=1 redirect;
rewrite ^/?s2member_pro_stripe_notify=1 ^/?optimizemember_pro_stripe_notify=1 redirect;
try_files $uri $uri/ /index.php?$args;

Note: OPM does not have the Lazy CSS/JS Loading option of s2member. Furthermore it breaks the pro-forms if activating autoptimze. Shittily you kinda still need proforms in order to enable people with time left to check out with credit card. In the end it really seems going from s2member to optimizemember is from one shithole into the next. I’m also having a big problem that ThriveCart Embedded checkout does not seem to be compatible with shortcode ultimate tabs. It is not loading if activated inside tab.

the nginx rewrite does not work - I’m clueless how to do a proper 301 return or rewrite right now.

Still searching for nginx rewrite. I noticed that changing the member roles did not successfully work - will need to export users, change the role in editor, then batch reimport.

So - finally I found out

location / {

if ( $args ~* “s2member_paypal_notify=1” ) {
set $args “optimizemember_paypal_notify=1”;
rewrite ^.*$ permanent;

if ( $args ~* “s2member_paypal_notify” ) {
set $args “optimizemember_paypal_notify”;
rewrite ^.*$ permanent;

if ( $args ~* “s2member_pro_stripe_notify=1” ) {
set $args “optimizemember_pro_stripe_notify=1”;
rewrite ^.*$ permanent;

if ( $args ~* “s2member_pro_stripe_notify” ) {
set $args “optimizemember_pro_stripe_notify”;
rewrite ^.*$ permanent;

try_files $uri $uri/ /index.php?$args;

thanks to adapting the solution from here:

Took me like 5 hours of finding that one - after relentlessly trying out other solutions which all did not work!

I’m not sure why if I enter in my browser e.g. I now get redirected to
(missing the =1) - however I resent some paypal IPNs that did not work - and they all got through to optimizemember and

I’ve solved it by adding the extra rule for 1 - as that is what is written in the documentation. However if you do =2 - then the redirect will miss the =1.

If someone comes up with a better solution - please post. This is working now (also without adding the rule for =1) - but I’m not 100% sure this is fail proof in future. I kinda guess right now s2member and optimizemember do not care about the argument - they listen anyhow. Maybe this was designed to have different outcome based on argument - but they never implemented different outcomes based on argument - so the argument does not matter. Of course I could manually add the =1 into the if and set - however then argument 2 would not be changed. So this is what I did.

Another problem that popped up is not related to ThriveCart.

As I handle all my invoices through - I need to get rid of the Invoice that ThriveCart sends automatically. Yes I know - I could activate ThriveCart integration on my account - however right now as it’s not possible to enable ThriveCart for extensions of users that have time left on their account - I cannot do this. (Enabling the ThriveCart integration on would require to disable the payment processor integration on in order not to send invoices twice!
So I’m waiting for ThriveCart to help me out here.

(oh and right now ThriveCart simply cannot replace - as without it there is no way to get EU VAT legal invoices yet!).

Well another problem is that OPM/S2 Member Pro Form Shortcodes cannot be entered in PHP - so here we go.
We will have create a second page, and redirect the users which have time left on their account towards it. No other users should see the page, as it will contain the dreaded old Stripe Pro Form and Paypal buttons.
Good thing is - as users get redirected there dynamically - I can deactivate autoptimize via the link - while keeping it active for all other pages. 2 Problems solved in one step.

Another nice thing - with ThriveCart you can create for each language of your website a different product - so No more foreign languages for users on checkout if your website is multilingual.

$your_date = ($optimizemember_auto_eot_time = get_user_field (“optimizemember_auto_eot_time”));
$now = time(); // or your date as well
$datediff = ($your_date - $now);
$timeleft = round($datediff / (60 * 60 * 24));
if($timeleft >=0 && $timeleft <=8 )
echo “<div data-thrivecart-account=“whatever” data-thrivecart-product=“8” class=“thrivecart-embeddable” data-thrivecart-embeddable=“tc-outdoormaps-8-R6NR0T”><script async src=”//" id=“tc-whatever-8-R6NR0T”>"; //extend Account
if($timeleft >=9)
echo ‘redirect to custom created page for extending users with time leftover’;
if($timeleft >=-100 && $timeleft <=-1 )
echo “<div data-thrivecart-account=“whatever” data-thrivecart-product=“6” class=“thrivecart-embeddable” data-thrivecart-embeddable=“tc-outdoormaps-6-RW5Y1G”><script async src=”//" id=“tc-whatever-6-RW5Y1G”>"; //reactivate Account
if($timeleft <=-101)
echo “Sorry - your account is broken. Please contact me at email@… and tell me that you have an EOT date set, but account is not active!)”;

Stripe does not like the IPN being redirected - should not have done it. Instead change in Stripe dashboard (well that’s cleaner anyhow). So only redirect Paypal IPN. Otherwise right now too little traffic to really tell.

Well Thrivecart and EOT are still not working together with Optimizemember - even though integration is advertised from both sides.

After complaining once more about Optimizemember not being updated for SCA compliance - I got the following quite interesting answer - wonder if they are really paying - and to whom they are paying?

OptimizeMember (OPM) is a licensed fork of S2Member and our development team has very little to do with the core of that plugin. We get our updates directly from S2Member for things such as the payment gateways and some core features. Unfortunately over the past 2 years or so, we have seen very few updates in the framework for S2Member.

While we have been able to patch issues on our own through our own developers, the SCA requirements (especially for Stripe) mean a total re-write of the payment gateways is going to be necessary. This re-write will come directly from S2member and will be provided to our development team as part of a framework update from the S2Member team as this is part of the licensing agreement we have with them. Our developers do not modify such things with the S2 framework as it would likely break future updates.

We unfortunately can not provide a timescale for this, but just to be as transparent as possible, it does not look like it will be here by the deadline. I could be wrong about that however and do apologize that we do not have more information to share about this.

As for ThriveCart, we do not have any development role with that app (they wrote their own code to integrate with OPM so we have no way to influence their platform). I would imagine since their platform is newer then possibly they’ll be able to get something out sooner for SCA.

We have also been advised that some countries are delaying SCA requirements which you can see through the following link:

We believe the delays are due to the unforeseen difficulties that many technology providers have had with getting systems ready for the new regulations.

Again, I’m very sorry for any frustrations or inconveniences caused by lack of updates for OptimizeMember. We certainly will get these pushed out as quickly as possible once we have the updated framework codes from S2member.

The above is also interesting - because it should really mean to be no problem for s2member to copy the Thrivecart integration from OPM - and then maybe together try to get ThriveCart to properly handle EOT or alternatively set up an internal method for handling EOT in combination with cancelled subscriptions.

Also the above reply is maybe interesting to s2member owners (whoever that is now). If they don’t see any money from OPM - they could have some claims or statements to be made

I mean 95% of the integration work is done - it’s just the last bit that is missing but making Thrivecart unusable with subscriptions right now in combination with OPM (and therefore also s2member if they added that little bit of code).

Secondly does not look good here for us regarding the 14. September…
Moving to OPM and Thrivecart is possible (Thrivecart is fully compatible with SCA) as long as you only sell fixed length membership in the meantime, in order to continue offering an alternative to Paypal buttons.

Personally, I will never pay to change to OptimizeMember when they are not even able to manage updates independently … Why pay so much in this case? This answer complies with the idea that I will never replace S2Member with OptimizeMember.
Thanks for this information. Best regards.

Right now I could not recommend it - except if you sell only subscription - or really sell software products (because Thrivecart works well then).

It would be maximum like 10 hours of code writing to get fully working ThriveCart support for OPM (just adding an EOT add time to the s2member/OPM API) and inform Thrivecart about it (ThriveCart devs are working pretty good!)

I know that for OPM or s2member to go out and tell everyone - if you want SCA compliance, buy ThriveCart is not really a possible way - at least longterm. But shortterm this would be an easy way to help those people who actually use s2member or OPM and have a sizeable userbase.

And yes - I’m disgusted with OPM technical support from the development side too. Must say their support if it were only about helping to setup things is top notch (while before Christian took over the forum here some months ago - s2member had no support whatsoever for years and only arrogant answers to questions they did not like at all)

It looks like there is no way back from OptimizeMember to s2Member without clear database…
Even if I deactivate s2member and optimizemember with safeguards off - then after activating s2member - s2if shortcodes are often not working correctly (with or without first converting all opm / optimizemember /… occurences in the database to s2 / s2member /…) and s2if in combination with shortcodes ultimate on the same page - breaks all shortcodes ultimates quicktags…

I kinda guess only way back is:
exporting wp_users/wp_usersmeta/comments from database, exporting posts/pages via editor, exporting the optimizemember settings - then installing wordpress from scratch and import all the exports.

Really annoying - have given up for now.

Nope - going back is painless. I’ve just discovered a new bug with s2member-beta (not sure if it is a bug affecting many people, or very special configurations only).

this bug and not realising it exists - just cost me like 8 hours…