WooCommerce version 3.0 was released this week, which brings about a major update to WooCommerce’s internal structure. This release hits some immediate performance improvements for stores, while it lays a lot of groundwork for future improvements, especially at large scale.
You’ll notice the version jump from WooCommerce 2.6.14 to 3.0.0 to reflect the scope of these internal changes. While there aren’t a ton of merchant-facing changes, we’ll go through those and some of what’s changed structurally for developers.
Version 3.0 of WooCommerce is focused mostly on performance enhancements along with foundation for future improved performance at scale. This ensures that, as stores grow, they won’t run into data bottlenecks while managing or adding WooCommerce products and orders.
While most stores don’t run into these issues, large eCommerce retailers may see performance deterioration with thousands of concurrent users or when processing more than a couple of orders per second. While these may be champagne problems, they’re still issues that larger retailers will have to deal with nonetheless, and this release helps to make strides towards improving the data structure of WooCommerce to make far larger performance gains in the future.
In the immediate release, the frontend product filters (such as “in stock” or “featured”) have been optimized to make product sorting and filtering up to 94% faster (tested with 8000 products). These same improvements also help for stores that hide out of stock products.
Variable product syncing has also been improved to remove some of the data checks that were not needed to sync prices or child product data.
If you want more complete details on some of these changes, you can check out the overview posts from the WooCommerce development blog:
Let’s take a look at some of the larger features and changes 🙂
WooCommerce has an overview of the new product image galleries you can watch on YouTube. Basically, there are some major improvements to photos on product pages:
- Visitors can now magnify, zoom, and open images in a lightbox (previously magnification and zoom weren’t possible)
- Gallery behavior is improved — clicking on a thumbnail updates the main image instead of opening a lightbox directly
- Mobile browsing is vastly improvement to support touch gestures, such as pinch-to-zoom, swiping between images, and others
- Mobile lightboxes are also more relevant now, as they’ll open the image in a size larger than its display size, which didn’t happen in previous versions (the image was constrained by the screen)
You can see the mobile gallery changes in action here: (Click an image to view a gif)
The gallery improvements make it easier to highlight product photography on any device, but the mobile improvements are especially welcome.
Structured data allows Google and other search engines to learn information about your products. Having this data available on product pages gives search engines the tools they need to find and display information about your product, which can lead to showing rich snippets in search results. You’ve probably seen this if searching for your own products and seeing that they have a star rating next to them in the search listings.
While having structured data isn’t a guarantee that a search engine will show rich snippets, it is a requirement to even have the possibility of showing them. In WooCommerce 3.0, the structured data for products has upgraded to the newer JSON-LD format.
This moves the structured data for products out of template files and into its own bit of code that’s output as part of your page source, making structured data more resilient to theme overrides and more consistent, regardless of theme.
The shipping zone creation and management UI has been refined in WooCommerce 3.0 to make it easier to add or update a shipping zone. You’ll notice that the zones screen is slightly different when you first visit WooCommerce > Settings > Shipping. In version 3.0, you’ll see a description of zones, and a new “Add Shipping Zone” button at the top instead of at the bottom of the table.
Previously, adding a zone was done in-line on the zones list. You’d have to (1) add a zone and name it, then save the new zone; (2) you could then add rates, and then you’d have to click each rate to edit its settings.
In WooCommerce 3.0, you can now add all of your rates to a zone at once, and click the rate name to open a modal, letting you add its settings. While this isn’t a huge change, it cuts down on the steps needed to update a zone or rate, and makes it a bit easier for new users to work with.
If you click on each image below, you’ll see a gif to illustrate how zone creation has changed.
Grouped product management has changed with WooCommerce 3.0 to simplify creating a grouped product in the WordPress admin as well.
Previously, you had to take several steps to create a grouped product, which could be confusing for new merchants:
- Add a new “Grouped” product type as the “holder” for the grouped product. This would be the product page that shows the group options.
For any simple product that should belong to the group, go to that simple product now and add it to the group under “Linked Products”.
Repeat this process with any simple product that should be shown in the group.
This was a long process if you wanted to show several products as part of the grouped product, as you had to edit every product in the group individually to add them to the group.
Now, you’ll notice that “Linked Products” will no longer show a “Grouped products” selector.
Instead, you can now add all products that belong to a group when you create the “Grouped” product parent / holder. The “Grouped” product now lets you use a multi-select to add all items that should be in the group from the same product page.
This significantly cuts down the number of steps required to create a grouped product, as you no longer have to edit every single product in the group to add it.
However, there’s a small improvement here: because the search input is on the grouped product page and not while editing a product in the group, you can now add a variable product to a grouped product. Previously, this wasn’t possible, as the group selector wasn’t shown for a variable product.
If a variable product is in the group, this will show the “select options” button instead of a quantity selector:
One change to note is that “product percent” discounts are no longer available. Because the same thing can be used with a cart percentage discount and a product restriction, these coupon types were redundant. These have now been merged into a “Percentage” coupon type instead.
There are also other small refinements in the WooCommerce 3.0 admin. First, you’ll notice that the “Purchased” column in the orders list has been removed:
This was done for performance reasons. To show this count / item list, when you viewed orders, every order had to be loaded, its items counted, and the item names grabbed. This led to performance issues for stores that sold a lot of items in an order and displayed a large number of orders per page.
Now, this page can load much faster because each order doesn’t have to load all of its items when displaying the orders list.
There are also two other small refinements. First, tax rates are now sorted automatically, putting the most specific rates first, so you no longer have to drag-and-drop to sort tax rates.
Next, the “enhanced” selects you see for dropdowns, searchable inputs, and multi-selects have been updated to a new version of select2 (the code library that generates these), so they’ll look slightly different.
Several of the debugging tools built into WooCommerce have been updated in version 3.0. While these typically aren’t used by merchants on a regular basis, they’re very helpful when getting support for WooCommerce or extensions.
First, here’s one merchants may actually use: you can now delete orphaned variations right from WooCommerce > System Status > Tools:
This will remove variations from your store that have no parent product. This can happen occasionally if an item that was variable has been changed to a simple product or different type, as these variations still exist in your site database. Since this can affect reporting or other queries on your site, this tool will make it easy to delete them.
Other debug tools, such as “shipping debug mode” have moved or been removed in WooCommerce 3.0. For example, the shipping debug mode setting is now under WooCommerce > Settings > Shipping > Shipping options:
Logging has also changed slightly in WooCommerce 3.0 from a merchant perspective, and you can now delete logs right from the “logs” list. This is helpful if you’ve enabled logging for a time period to resolve an issue, but can now delete the log, as logs can fill up with data over time that you likely don’t want to keep.
Most of the changes in WooCommerce 3.0 are under-the-hood, so developers should definitely take note of these. The introduction to CRUD methods from the developer blog is an important primer on writing WooCommerce 3.0+ compatible code, and this is where the largest amount of changes have been made, basically refactoring several core objects (products, coupons, customers, and orders) in WooCommerce. The consistency between these is welcome, but there are plenty of new things to learn.
As a result of moving to new CRUD methods for adding, updating, getting, and deleting data, several hooks and methods have been deprecated in WooCommerce, so updating to newer hooks and functions is recommended.
The CRUD system will allow WooCommerce to change its backend data stores in the future without affecting developers, letting WooCommerce optimize for scalability at a very large level, which isn’t possible with its current database schema.
Developers may also want to check out a few other posts on the developer blog:
- CLI tools were updated to leverage the WordPress REST API rather than an entirely custom CLI structure.
- There’s a list of template changes in the beta 1 announcement for frontend developers.
- There’s also a guide to adding support for the new product gallery to a theme for frontend changes.
- The 2.6 -> 3.0 migration notes are an essential read for developers updating custom plugins, themes, or snippets (especially pay attention to order dates, select2 version changes, and new data stores, as some items now use objects for data instead of arrays).
- Extension developers who still need to update plugins for compatibility should check out examples from the dev blog:
- Finally, an improved WC_Logger will let plugins implement their own PSR-3 compliant logging.
The product gallery and structure data updates in WooCommerce 3.0 are two welcome changes to product pages, and they improve a few of the biggest influences in purchase decisions: product photography, product reviews, and search engine visibility / click-through.
The performance enhancements in this release also speed up the shop frontend and browsing experience, helping customers get to the improved product pages even faster.
While the admin UI changes are nice “quality of life” improvements, most of the other changes in this release are structural, massively updating the internals in WooCommerce to provide it more flexibility in the future for even further performance upgrades. While store owners won’t see the full effects of this immediately, it clears the way for WooCommerce to make more aggressive changes to the way it handles data for performance gains while leaving plugins or custom code unaffected.
However, if you have put customizations in place on your site, you’ll want to update them for WooCommerce 3.0 compatibility at some point, as likely these would break with WooCommerce 4.0 (when the way data is stored for your orders or other items actually changes).