WooCommerce Memberships is over one year old now! We launched the plugin in June 2015 and has been a big hit ever since, rapidly becoming one of the most popular WooCommerce extensions.
We are happy to announce that Memberships 1.7.0 has been deployed, just a couple months later than Memberships’s birthday. This release represents the largest update since the first version! Keep an eye out in your dashboards for the update, which should be out today.
First, a bit of background
When originally conceived, the original Memberships plugin development took about one year to complete, from planning to version 1.0. While restricting content to members may very simple and straightforward at first, this concept quickly becomes complicated when we consider how WooCommerce, and how WordPress work: this plugin would have to sit in a much bigger ecosystem and open to unpredictable customization, and would have to work in a variety of environments and conditions. Inevitably, it’s impossible to predict all of these, and that’s where customer feedback comes in.
Sometimes we know that a feature should be included, but there is often a variety of ways this could work. We need to know how customers are actually using the product before adding a feature. Just like a carpenter needs to take measurements before making a cut just once, software developers need to do careful planning before releasing new code: it’s much harder to change after you’ve released a feature and committed to supporting it.
The latest version of Memberships released today includes several features that have been frequently requested over its first year. To build these features, wanted to be sure we had an informed view of how they work.
As a result, this release contains several new features at once. This was partly due to several changes being interconnected, which prompted the opportunity to work at more than one feature at the same time, and partly due to our necessity to pave the way in our future releases to work from a better-articulated codebase.
Now let’s talk about what’s new!
One of the most requested items on WooIdeas was to trigger emails to be sent to the customer when a Membership expires. So far, the only Membership email has been the Membership Note, which was sent to the customer when an admin manually added a note to the membership and ticked an option to notify the member.
We have now three more emails: “Membership ending soon”, “Membership ended”, and “Membership renewal reminder”.
The three emails are scheduled around the expiration date of a membership, so if the membership is unlimited these won’t be used. Their settings can be tweaked inside the WooCommerce Emails setting page, while the content of each email can be defined inside each Membership Plan so it can be different.
The “Ending soon” email is sent before a membership expires to alert the member that is membership is expiring soon and s/he might lose access to restricted content or other membership perks. You can define a variable amount of days when to send this email alert, with the default value of 3 days.
Right when the membership expires, another email can be sent: the “Membership ended” email. This can prompt the customer to renew his or her membership.
Since each plan or setup can have different conditions and offerings, the content of each email should able to respond to these circumstances. As such, each email message is defined as part of the membership plan. This way, you can write less generic messages for your member emails, and there’s no need to come up with any bulky customization for more segmented content (of course, template customization is always available if you need to do something more elaborate).
You can have some memberships upsell other memberships, or target renewal messages for the specific plan as desired.
You can also use merge tags to replace dynamically some content — a handy list of which will be shown at the side of the plan email content settings. A useful one is definitely the renewal url merge tag, which can let you add a link that customers can click to renew their membership. This link will automatically log customers in (since we’re directly emailing the account the membership was purchased with), add the product that grants access to their cart, and lead them straight to checkout.
The last email available is the “Renewal reminder” email. Like the “Ending soon” email, this email has a “days” setting so you can customize the number of days after a membership expired when to send the email.
This email is conceived to try to win back a former member that hasn’t renewed promptly after expiration. So you can use the email as a marketing device or just a simply reminder that the customer can become a member again by purchasing another product, resubscribing, etc.
There are, however, memberships that can’t be renewed. When a membership can’t be renewed (it’s not purchasable), the renewal reminder won’t be sent. For example, manually-assigned, limited memberships that have no product that grants access will not send renewal reminders; there’s no product that customers can buy again to regain access.
With this new release of Memberships we added more access option to membership plans which can prompt this condition!
Another request from our users was to enable more ways to let users grant access to membership plans. So far we had only two: memberships that were manually assigned by an admin and memberships created via users purchasing some specific product. With Memberships 1.7.0, we’ve added “free memberships”.
By “free membership”, we mean a membership that doesn’t need to be assigned by an admin but can be acquired by a shop customer by just signing up to the site, via account registration.
When creating this type of membership plan, anyone who registers an account will get access to the plan (aside from shop managers and administrators, as they already have master access). This is useful if you want to create some kind of “Free Plan” that has limited access and perks, giving your customers a peek at your restricted content before they buy a product to get full access.
Since a registration-based membership cannot be renewed (as there’s nothing to purchase), this is also a great way to provide a “trial” membership that you’ll use to upsell other memberships.
We hope you will get more conversions with this plan and increase your sales, as well as creating a better experience for your customers!
Fixed-Date Membership Plans
Along with the Free Membership plans, we have introduced new combinations for setting the start and end date of a membership: fixed dates. You can now set the start and expiry date of a membership plan on a precise date of the calendar, regardless when the membership was purchased.
Since the start date can be set manually, this could affect membership access. If the start date is in the past, it won’t affect the membership access (it starts when the purchase is made); if the start date is in the future, though, it will delay the membership.
A delayed membership will mark all the content the membership would normally have immediate access to, as delayed access — as if you had ticked the option to grant access a few days, weeks or months after the start date. This access will therefore begin as soon as the start date is reached.
For example, let’s say you create monthly plans for each month of the year that start at the beginning of a month, and end on the end of it. If I purchase the plan valid for November only, and it’s still October, I wouldn’t be able to get full access to member content until November 1st. And then on December 1st, I would lose access again and never get it back again.
Fixed dates memberships normally can’t be renewed once expired: if the expiry date has been reached, there’s no point in renewing a membership that can be activated anymore.
But wait, there’s more! Creating fixed dates membership plans prompted the addition of a feature made available when Memberships is used with WooCommerce Subscriptions. You have now the option to decouple the subscription billing cycle from the membership duration. 🎉
Until now, when the product that granted access was a subscription product, the user membership created would remain active as long as the subscription was kept active by paying the recurring bills.
Now you can enjoy a much wider range of possibilities! For example, you can create a Subscription product that has a quarterly billing for one year while the membership has a 3 year length. The membership won’t expire when the subscription ends, as the subscription has done its billing.
And also, since you can define multiple products that grant access, and some of them can be subscriptions while others can be regular products, now you can choose to have different lengths whether the product that grants access is indeed the subscription or just a regular product.
These new options allow store owners to create a new offering and might even prompt them to rethink their marketing strategy to win more customers that can access to membership perks with a lower barrier of entry.
For example, perhaps before you had a membership plan that demanded the purchase of an expensive product to get access; now you can use a subscription product and dilute the payment over a number of installations, which can make the offer more attractive to customers wary of spending a large sum upfront.
Manual Subscription Links
This is a small feature / tweak which was requested by users of Memberships and Subscriptions. Historically, when a subscription product granted access, we would automatically link the user membership created to the subscription upon product purchase. The subscription and the membership would become linked and the subscription status would trigger status changes in the memberships as well.
The only way to create this link was via purchase, so support for manually created subscriptions was difficult. If you manually created a subscription, you needed to also manually create the order record for it, then run the “Grant access” action for the plan to pull in new memberships (as “Grant access” checked orders for the membership product, not subscription records).
The feedback we’d gotten from users and developers was that they didn’t always want to create order records, and wanted a way to manually link a membership when manually creating a subscription record. While we still recommend using order records where possible, we also want to be sure we’re supporting edge cases due to imported subscriptions or manual subscriptions, so we’ve created a way to edit or add subscription links to memberships in the user membership edit screen.
You’ll find this new control right under the billing details, where you can add or remove a subscription link, as well as reassign (update) the membership to a different subscription. You can search for the right subscription by typing the subscription number or the subscription owner’s name in the “edit link” pop up box.
This can be a handy tool to make tweaks, fix errors, or handle things manually. It is also a tool that should be handled with care if you don’t want to create confusion among orders, subscriptions, and user memberships. We recommend to test its effects on staging sites first, especially if you’re not familiar with it or are a new user of WooCommerce Memberships. (Of course, you can always revert the changes by editing the link once again and restoring the previous setting.)
Contextually to this tweak, we also extended support to dynamically add, change, or assign subscriptions in the Memberships CSV import feature previously released in v1.6.0. You can now add a value in the
subscription_id column that will look for an existing subscription and link it to the membership that is created or updated. We have updated the WooCommmerce Memberships CSV Import & Export documentation for this.
Exclude specific products and sale products from member discounts
Another useful tweak has been added to the member discounts feature of Memberships. Until now, when assigning member discounts to a plan, these would always apply to the specified products, regardless if they were on sale or not. When specifying all products or specific categories of products, there wasn’t an easy way to create exclusions.
Now we have two more settings to fine tune your plan discounts policies. One setting is found in the WooCommerce Settings Memberships “Products” tab, where you can set to exclude all products on sale from having member discounts applied.
Another setting is inside the Memberships plan in each WooCommerce product. From here, you can now individually exclude a product from member discounts, regardless of product settings or sale status. So, even if you add that product to a plan discounts (individually or because part of a category), the discounts won’t apply until you untick this exclusion setting from the product page.
The last feature showcased in this release announcement post is perhaps the one least noticeable from the end users’ perspective, but we are sure that there will be several developers and agencies that will find it useful when working on clients’ sites, as well as power users that manage their own server and want to have a quick overview of their Memberships installations from a terminal.
We added support to WP-CLI! To quote the WP-CLI project website itself:
WP-CLI is a set of command-line tools for managing WordPress installations. You can update plugins, configure multisite installs and much more, without using a web browser.
Memberships WP-CLI is built on top of the WooCommerce WP-CLI implementation so you would have to execute commands always prepending “wc” to wp-cli commands. We currently support two main subsets:
wp wc memberships plan – to manage membership plans
wp wc memberships membership – to manage user memberships
There are different commands we support for both of these objects: create, delete, get, list, update, to which we can pass different arguments. The best way to learn how to use them is invoke inline help with the commands:
wp help wc memberships plan and
wp help wc memberships membership, or review our Memberships CLI Reference for additional details.
Rules are not currently supported while creating or updating a plan, but we are considering support for them in the future. We are always happy to help developers and agencies customize or manage plugins, so if you have requests on how to improve this console tool to make it easier for you to manage your WooCommerce Memberships installs, drop us a line or contact WooCommerce support!
Coming soon in the next major release
Memberships 1.7 has many changes under the hood. The Memberships emails scheduling feature required the replacement of our handling of expiration events with a brand new event scheduling system which we borrowed from Prospress’s Subscriptions: the Action Scheduler.
This was due to a scaling problem that WordPress cron system poses (it’s an interesting topic which we could cover in another post). By this release we also had to make several changes at the discounts and the membership plan length handling given the new features introduced here, while we wanted to retain backwards compatibility.
By Memberships 1.8, (our next major release), we have plans to overhaul rules and content restrictions parts, to address some issues and integrations or feature requests from our users. Feature-wise, we want to make changes in the Member Area, to accommodate for some tweaks and customization requested by our users, add some background processing for the membership plan grant access button and perhaps other tasks, improve the Memberships settings UI, and many more tweaks and updates. Overall, 1.8 will be a “polishing” release in which we will focus on improving Memberships performance as well as expanding the features we have already built so far.
Maintenance-wise, we have already started working on automated testing; this is a largely technical, but important aspect in a software product lifetime, and an essential step in a higher level of project maturity. Memberships now has a pretty large codebase, which means that if we want to make some tweaks or introduce new features, there are more moving parts affected by that change. We don’t want to introduce regressions, we want to be sure we don’t break things in new releases, and we want to be able to speed up our development cycle. Therefore, we need to have automated tests that run before each update so we are sure that we deliver a very stable product to our customers.
This is an exciting time for Memberships and we’re excited to continue working towards building one of the most popular and feature-complete Membership plugins out there for WooCommerce and WordPress alike!