WooCommerce Memberships version 1.9 is being released today! Exactly one year after 1.7, our biggest feature-packed release since the plugin inception. In between there have been 15 releases, 1 minor and 14 patch releases (according to semantic versioning terms). That’s more than one plugin update per month!
Version 1.8 was too an important release: it had to account for WooCommerce 3.0 compatibility, an important milestone for the world’s largest eCommerce platform. For this reason, though, it didn’t pack, as many updates (primarily improving discount handling for broader plugin compatibility). Version 1.9 aims to bring improved performance and some new refinements to merchants and their customers.
Teams Are Coming
Memberships for Teams is currently in advanced stages of development and we’ll start to work with our testers shortly. Development begun around the same time as Memberships 1.9, and some modifications within Memberships were necessary to ensure Teams would sit on the core plugin in the best possible way.
Plan Rules Optimizations
Along with internal architectural tweaks, we took the chance to improve the plugin’s general performance. In particular, we’ve been noticing that many Memberships users create several plan rules in their installations. However these rules frequently overlap, and their organization could be simplified by just grouping these together. This is partially due to the fact the rules are often created from the content (post, product) edit screen and not from the plan edit screen. This has been a shortcoming of Memberships, as the plan rules thus created would just stack up rather than merge gracefully together.
WooCommerce Memberships 1.9 took care of that. The plugin now tries to intelligently group together overlapping rules. For example, if I want to restrict product A and product B, I don’t need to have two separate rules, one for each product, but I can make a single rule that lists both A and B. So, if you attempt to restrict each product from each individual product page, or create two distinct rules by any means, Memberships will now merge the two rules together (if other parts of the rule, like access time, match). This will reduce the number of rules in your plans.
It will affect Memberships in several ways: by improving the loading time of the plan page and the plan readability itself; perhaps most importantly, it improves the overall frontend performance when it comes for Memberships to analyze all your rules and raise restrictions or granting users access.
While giving plan rules a general overhaul, we also added support for managing and editing rules via WP CLI. Since version 1.7, developers could manage user membership and membership plans via the command line; however rules support wasn’t possible with this developer-friendly tool. With the refactors to rules structure, developers can now list, update, create, and delete rules from a terminal, even through a shell script, you name it!
We use this feature ourselves occasionally for development and automated tests, and we hope it will be a boon for developers, agencies, and power users alike, who need to troubleshoot installations or perform advanced tasks which would be inconvenient to do from a graphic interface. We’ll be updating our developer-focused documentation soon with more CLI details.
As part of the performance improvements tackled in this release, we didn’t stop at rules. There were parts of the Memberships architecture we’ve wanted to improve for some time, and this release represented a good opportunity to do it.
Content and product restrictions now have a better internal organization. Combined with the improvements within the rules handling mentioned earlier, we’ve seen consistently faster loading times in admin and especially frontend areas. One quick example: if a product with restriction rules had a large number of variations, reading the rules for each variation could have produced a slowdown. Instead, we’ve seen now an improvement of up to 85% in loading times and an equivalent reduction of queries for such cases.
Apart from performance, there are two tweaks which merchants will find interesting in the new release related to restrictions.
The first is that Memberships no longer uses
the_content filter (a core WordPress hook) to alter a post or product content to bar access to non members using the “Hide Completely” or “Redirect” restriction mode. This method worked well for us in the early stages of Memberships; however it creates occasional issues when merchants use certain page builders which, in turn, also used the same filter at a different priority — or even worse, output HTML before or after the post content. In the latter case, in fact, the content added by the page builder may have still been visible. We’ve also seen this with some plugins that output custom fields or other content.
In Memberships 1.9, we changed this approach — now Memberships filters the
WP_Post object itself instead. That is literally the entire WordPress post, not just the content of the post. This enhances Memberships compatibility with a greater number of plugins, open source and commercial alike, simplifying its architecture and boosting performance in the process.
Note that this means that some content added by plugins, potentially custom fields or other content, may now be hidden, whereas previously it was not.
The other tweak, perhaps the most interesting one for a good portion of Memberships users, is that the shop page can now be restricted! This represented a long time request from some of our merchants, who wished to hide all their products, including the whole catalog pages from non-member customers.
Although it’s one of those things that may seem simple to do, the way WooCommerce outputs the shop makes it not so obvious. Merchants often assumed the shop page was a normal page: it’s listed among the pages in WordPress and thus can be selected when creating plan rules for pages to restrict, after all. However, it also happens to be the products post type archive, which in WordPress is a separate entity.
In version 1.9, you can restrict the shop page by either using a page rule targeting the shop page directly; if all the products are restricted and you’re using “Hide Completely” as the restriction mode; or, if all the products are restricted and you are using “Hide Content” only, but have enabled the option to hide your products altogether from catalog pages. In short, when we can safely assume the shop shouldn’t be shown, we now try to hide it.
Adding New Memberships
Let’s now move onto new features that do have a more visible impact in your day-to-day usage of WooCommerce Memberships.
From the Memberships admin screens, as you know, you can add or transfer user memberships. Until now, Memberships adapted a WordPress feature to create the necessary interface for this (for the curious, it was WP Admin Pointers: an tool meant really for creating user onboarding and interactive walkthorughs). That worked well, but wasn’t flexible enough and perhaps not too user-friendly. So, we upgraded this interface to use modal windows instead. This not only gives it a more sleek look, cohesive with other WooCommerce views, but also leaves room for added features and future-proof extensibility.
Most importantly, you can now create new users and assign them a membership at the same time, either when creating a new membership or transferring one.
It’s a nice touch that would let admins save time to something that should be simple. Instead of heading to the users screen, creating a user, then going back to the members screen, you can do all of that at once from a convenient panel.
This new approach is a lot more flexible for us too: it will be easy to expand or tweak the interface in future releases, as needed. Third party developers can leverage the modals and re-use them, if they want. It’s something that the upcoming Memberships for Teams add on will already utilize to handle group memberships.
Non-Member Shortcode Enhancements
A lot of WordPress users like shortcodes. WooCommerce merchants like shortcodes. Memberships comes with shortcodes. Everybody gets a shortcode!
The most popular, arguably, is
wcm_restrict, used to restrict pieces of content which are not handled directly by plan rules. Its usage is pretty straightforward: display something to members of one or more plans using an optional
The other main shortcode bundled with Memberships is
wcm_nonmember, which offers the opposite control: to display information to non-members. Unlike the former, though, the non-member shortcode didn’t offer the same granular control over which non-member users the message should be shown to. Non-member of which plan exactly? Only all of them. Until now.
For example, this is the current behavior of the
[wcm_nonmember]content shown to anyone without an active membership[/wcm_nonmember]
The “content shown to anyone without an active membership” message is displayed to guest users, as well as logged-in users who aren’t member of any plan. However, this message would never be shown to any active member.
We’ve seen that many merchants want to use this content as an “upsell” prompt; rather than saying, “show this to non-members,” they’d like to say, “show this to people who are not silver members“, which we’ve now added. Here’s the new shortcode optional “plans” attribute at work:
[wcm_nonmember plans="silver,gold"]Content shown to anyone without an active silver or gold membership (even other members!)[/wcm_nonmember]
In this case, we can define which plans you should be member of to avoid seeing the message between the shortcode tags. And just like in
wcm_restrict, you can define plans by their IDs or as plan slugs, just like in the above example.
Improved Settings & Configuration
Memberships does have a lot of admin views, but probably not a lot of general settings, when compared to other advanced WooCommerce extensions, and certainly to WooCommerce itself. However, it does have a lot customizable user messages within its settings pages.
This lets you decide what to tell to users who are not members but need a membership to access some restricted content. But what if they can become members by purchasing some product? What if they are members, but their access is being delayed by a dripping rule? Given the high versatility of Memberships, you end up with many possibilities, each resulting to a user message displayed in front end.
We truly understand the importance of not sending a confused message, rather give clear, coincise information. Therefore we wanted to offer you, the merchants, our customers, many controls to offer the necessary information to your customers. The problem here is that we mixed the custom messages inputs among the few functional settings inputs within the WooCommerce Memberships Settings tab. The whole Memberships tab became rather crowded and confusing, especially for new users.
It’s a tool to let merchants display clear messages to customers, yet the interface we ended up with didn’t inspire the same confidence to be clear and concise.
That’s why we gave it a good polish: messages are now separated by concern and admins have a convenient legend at the top for common merge tags. Because of this, the rest of the settings, under “General” and “Products” sections is shortened too. We believe this arrangement should be easier to grasp for existing users, and definitely less intimidating to new users.
Last, but not the least, under the hood all the user messages handling has been restructured as well, making it easy for us and other developers alike to manage and extend. We included new filter hooks to alter the messages appearance, CSS and HTML, which may come handy to theme developers and advanced users that need further customization.
Improved Members Area
Memberships front end received some love too!
For quite some time, Memberships choice of displaying the user memberships list below the main screen was a bit <cough!> controversial. Our rationale was that the majority of customers have one membership plan to be listed there, and knowing which plans they are member of is likely one of the most important pieces of information to be displayed in their dashboard.
Other reasons had to do with how we chose to build and display the Members Area, which is a separate entity with its own endpoints and URL structure. Our original approach was also built to take this structure into account. Yet some merchants weren’t too happy with the Memberships list not being placed in its own menu item, citing inconsistencies with the HTML output or with the rest of the WooCommerce dashboard UI.
In Memberships 1.9 we decided to move closer to WooCommerce core organization. Now, the customer Memberships are accessible from a dedicated tab. If the customer is only member of a single membership plan, this takes them directly to the members area for that plan. If the customer has more than one membership, we’ll first show the “My Memberships” list, letting them choose which members area to view.
Once accessed, the members area is similar to its original organization since its introduction in version 1.4. However, instead of having account navigation on the side, and Memberships navigation at the top of the page, the membership navigation will simply replace the regular account navigation. The member can then choose to go back to the account dashboard to see the rest of their account data.
We’ve also added a new section “Manage” which carries the membership details and available actions. We plan in the future releases to further expand this new approach, to allow for more actions, as well give merchants the possibility to display custom content or links.
Finally, we added the ability to sort some of the membership content. For now, only the content titles or the post type (for content) is sortable. Access dates, for dripped content, or member discounts, are a bit trickier to sort since we generate them on the fly (by looking at the current date) and so they would be harder to account for in sorting, or generate excessive overhead. However, we will try to address those in a future release, taking advantage of the first steps taken in this version of Memberships.
Undoubtedly, WooCommerce Memberships 1.9 feels like “that” yearly release with the uber-long changelog. There ought to be one every now and then in a software development cycle. So what’s next, you might ask. The to-do list in Memberships roadmap certainly isn’t short!
In the next months the most exciting updates will probably come from add-ons, as announced at the beginning of this post. Within Memberships core you might expect soon a 1.9.1 release and other patch releases to accommodate for minor tweaks that didn’t make the cut into 1.9.0, minor touch ups as well as the unavoidable bugfixes. By version 1.10.0, we plan to build some batch-processing for some resources-heavy tasks like granting access for past purchases or importing members. Of course, there’s much more than that!
Stay tuned for more updates and don’t hesitate to leave a comment or contact us to leave your feedback! Behind every line of code there is great feedback from our customers 🙂