WooCommerce 9.0: Our most accessible checkout and much more

WooCommerce 9.0 Has been released on June 18, 2024. This post highlights what’s new in this version of WooCommerce.

See our update guide.
Download directly from WordPress.org.

Other important information:

Latest Release:

👉 WooCommerce 9.0.0

About:

  • ✅ Backwards compatible
  • Commits: 367
  • Contributors: 78

An improved checkout experience

Checkout Blocks — UI improvements for better conversion: Updates include a refreshed order summary with sticky functionality on desktop, clearer display of local pickup options, improved address form layout, and adjustments to checkout steps. Accessibility improvements were also made to enhance the shopping experience, addressing feedback from Amber Hinds from Equalize Digital in #47470 and #47460.

We’ve updated how we display the selectors for delivery options and we’ve also truncated location information with “Read more” prompt to make the experience easier to navigate for buyers.

shipping selection screenshot

The Checkout Address Form received some UI changes where Address Line 2 can now be made required. When optional, it will be displayed as an inline button instead of an input.

checkout steps screenshot

Checkout steps will not have step numbers enabled by default, resulting in a cleaner Checkout. These can be re-enable in the editor.

order summary screenshot

The checkout order summary has received several updates, including a visual overhaul and the implementation of a sticky feature for desktop users, with mobile coming soon. Additionally, free shipping methods will now display as “FREE” instead of “0.00”.


Product Collection Blocks — The next iteration

Add- Prevent collection different than Product Catalog from being filteredPull Request (#45820)
Add – Product Collection: Implement Preview Mode (#46369)
Product Collection: remove Beta label (#47572)

The Product Collections blocks are no longer in beta and are ready for use in your store! We recently announced the development plan for these blocks here and are excited to share the enhanced navigation, responsiveness, granular control over the overall layout, and more robust filtering options that they provide when displaying a store’s products.

product collection block editor view
Checkout what we’ve added to the Product Collection block in this latest release as part of it’s debut out of beta

This new version includes better distinctions between the general Product Catalog and specialized collections like “On Sale” or “New Arrivals.” Only the Product Catalog remains filterable by buyers, ensuring specific collections maintain consistent product displays regardless of applied filters.

This allows you to prominently display certain products, without the selected filters interfering with their display, as you can see in this demo:

We’ve also added a preview label and tooltip in the Product Editor, clarifying that actual products displayed on the front end may differ based on the viewing context. This is helpful when a Product Collection block is added to any of the following templates: Products by category, Products by tag, Products by attribute, and “Sync with current query” toggle is ON in inspector controls, which results in the products displayed in the editor differing from the products that will be displayed in the front end of the store.


Experimental: Faster HPOS with Full-text search indexes

Add experimental support for FTS indexes in HPOS (#46130)

SearchWooCommerce 8.9WooCommerce 9.0WooCommerce 9.0 with Full-text indexes
All (no results)3261ms1904ms676ms
All (3k+ results)6679ms3070ms547ms
Customers (no results)1049ms1033ms0.6ms
Customers (3k+ results)2111ms2119ms40ms
Products (no results)1897ms781ms0.6ms
Products (3k+ results)3715ms1507ms53ms

Benchmarking of WooCommerce order search

Experimenting toward a faster HPOS: We will be enabling an experimental version of Full-text search indexes for order addresses and products, leveraging MySQL’s advanced indexing techniques to speed-up search operations. This improvement, part of the High-Performance Order Storage (HPOS) initiative, optimizes database efficiency and scalability for WooCommerce stores.

When activated, all order searches will automatically leverage these FTS indexes, leading to faster search results. Additionally, we’ve ensured that non-FTS searches remain fast as part of HPOS, providing a balanced performance boost across the board.

To enable this experimental feature navigate to WooCommerce > Settings > Advanced > Features and activate the “HPOS Full-text search indexes option”. Please note, this feature requires HPOS to be enabled. We encourage testing this feature in a staging environment and sharing your experiences and feedback through our GitHub Discussions.


New REST API endpoint for refunds

Add standalone wc/v3/refunds endpointPull Request #46895

This update introduces a brand-new endpoint, wc/v3/refunds, designed to streamline the process of retrieving refund data.

This endpoint simplifies the process of fetching refund data by allowing users to obtain a list of refunds directly, sorted by date and optionally filtered by a date range. This change removes the need to link refunds to their corresponding orders, streamlining the data retrieval process. The data returned matches that of the orders endpoint, ensuring consistency across your applications.


More new features and updates

A more secure, legible System Status Report (SSR):

Improved readability and better UX for GitHub bug reports, by optimizing the format of the SSRPull Request (#47088)

SSRs in WooCommerce now feature a collapsible section for issues, improving visibility, and enhanced formatting with back-ticks for readability. Security has been upgraded, hiding WordPress and site URLs, database prefixes, and associated tables from public reports, protecting sensitive information during report sharing.

Adjustment to text based settings fields

Fix WC_Settings_API textarea validation method (#48432)

When editing settings fields in WooCommerce, HTML iframes will now be correctly removed on save for all user roles.

On the shortcode checkout, payment methods will no longer render HTML iframes in the description area unless they are inserted by an extension using a hook or via the Payment Gateway class file.

This is to ensure consistency between legacy and block based checkouts, and for store safety.


Rename Classic Block Templates

Rename classic template blocks to avoid confusion (#44931)

Some block names were often confusing for users. As an example WooCommerce Single Product Block (a block that represents a “classic” PHP template) was often confused with Single Product block (modern block).

To address this, we decided to rename the blocks representing so-called “classic templates” to distinguish them from modern blocks more easily and to better describe their purpose.

Checkout the new names below
Before WooCommerce 9.0WooCommerce 9.0
WooCommerce Single Product Block-> Product (Classic)
WooCommerce Product Grid Block-> Product Grid (Classic)
WooCommerce Product Taxonomy Block-> Product Category (Classic)
WooCommerce Product Tag Block-> Product Tag (Classic)
WooCommerce Product Attribute Block-> Product Attribute (Classic)
WooCommerce Product’s Custom Taxonomy Block-> Product’s Custom Taxonomy (Classic)
WooCommerce Product Search Results Block-> Product Search Results (Classic)

HTML Tag Update in Block Templates:

Replace div element with main in block templates (#47119)

We will be changing the main HTML tag from <div> to <main> in several block templates in an effort to improve accessibility. The <main> tag defines the central content of a page, providing better support for assistive technologies such as screen readers. Checkout the developer advisory on this for more information.


API Updates

  • Add support for ‘customer’ field to REST orders controller (v2/v3)(#46878)
  • Prevent product from being saved prematurely when updated via REST API (#46674)
  • REST API: Add standalone wc/v3/refunds endpoint (#46895)
  • REST API: Add variation product type to response (#47377)
  • REST API: Add missing line item schemas to refunds endpoint (#47254)
  • Remove the Legacy REST API from WooCommerce core (#40627)
  • Fix: Deleting a shop coupon using API returns a 500 error (#47474)

Other important information

Database updates

📀 Run wc_update_900_add_launch_your_store_tour_option on WC 9.0 update (#47634)

This change adds a new update function to add the woocommerce_show_lys_tour option

This release contains important security updates

📆 We released a fix for the following vulnerability on June 4, 2024. 9.0 has also received this fix:

The unintended loading of a file on the frontend of WooCommerce storefronts for versions 7.8.0 through 8.9.1 was fixed as part of a backport issued for versions 7.8-8.9. Read more in this Developer Advisory.

📆 We released a fix for the following vulnerability on June 10, 2024. 9.0 has also received this fix:

A vulnerability introduced in WooCommerce 8.8 allows for cross-site scripting — a type of attack where a bad actor can manipulate a link to include malicious content, for example, JavaScript, on a page. While the content is not saved to the database, the links may be sent to victims for malicious purposes. Read more in this Developer Advisory

Coming soon mode is…coming soon

In our pre-release post we mentioned an exciting new feature that allows merchants to build their stores behind a coming soon page would be introduced in 9.0. After testing through our release process, we decided we still had some finishing touches before launching this feature, which will be included in the upcoming WooCommerce 9.1.

You can still test this coming soon feature and learn more about in this post.


Changelog

See all bug fixes and improvements
See all features and additions
See all updates and tweaks
See all developer updates
See all enhancements

View the full changelog.

Get WooCommerce 9.0

👉 To upgrade: See our update guide or download the latest release from WordPress.org.

🐞 Found a Bug? Please submit a report it on GitHub.

Contributors

mcliwanow
barryhughes
sflems
hesahesa
wavvves
roykho
itzmekhokan
Saggre
octaedro
ObliviousHarmony
Konamiman
KokkieH
naman03malhotra
tjcafferkey
mattsherman
Aljullu
senadir
gigitux
brentmackinnon
alvarothomas
rodelgc
nigeljamesstevenson
kkmuffme
vedanshujain
prettyboymp
ilyasfoo
nefeline
psealock
ianlv
gedex
samueljseay
Rahmon
nielslange
albarin
layoutd
manzurahammed
AndrewJDawes
raicem
Dan-Q
jorgeatorres
mattallan
rjchow
rrennick
helgatheviking
retrofox
louwie17
coreymckrill
axi
adimoldovan
masteradhoc
ecgan
opr
Stojdza
thealexandrelara
thilinah
imanish003
WunderBart
mdperez86
nerrad
vishnugopal
adrianduffell
veljkho
79mplus-admin
kmanijak
vladolaru
lanej0
yansern
nathanss
moon0326
alexminza
alexflorisca
cesarcosta99
jonathansadowski
chihsuan

Keep yourself in the loop!

Sign up for the WooCommerce developer newsletter:
This field is hidden when viewing the form
This field is hidden when viewing the form
This field is hidden when viewing the form


19 responses to “WooCommerce 9.0: Our most accessible checkout and much more”

  1. thanks for the detailed changelog, with clear explanations, and with a quick ToC
    the efforts are appreciated, keep it up.
    Hope you’ll accelerate at finalizing the template blockification, so we can better ‘play’
    ++
    btw, the Product Collection Blocks video is ‘private’

    1. Julia Amosova Avatar
      Julia Amosova

      Thanks for the positive feedback, Marc! Glad to hear you find the improvements in the release communication helpful. And thank you for reporting the issue with video being private in the Product Collection Block section – fixed ✅

  2. The improvements to the checkout experience and the introduction of Product Collection Blocks are going to be game-changers for store owners. The new REST API endpoint for refunds and the experimental full-text search indexes also sound very promising. Thanks for all the hard work! Can’t wait to update and explore all the new features.

  3. Unfortunately the new Woocommerce version did not work with my site. So I had to reinstall version 8.9.3

    I received an email from WordPress itself with where the errors came from or what missing is.

    1. Shani Banerjee Avatar
      Shani Banerjee

      Hi Annike, we did just release a developer advisory in the blog post following this one. Are you able to see if it is related to that?

      1. Good morning. I’m not sure if it is related to the developer advisory. The errors that I received in the email are the following:

        Error Details

        An error of type E_ERROR was caused in line 19 of the file
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-content/plugins/woocommerce/includes/class-wc-api.php.
        Error message: Uncaught Error: Class “WC_Legacy_API” not found in
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-content/plugins/woocommerce/includes/class-wc-api.php:19
        Stack trace:
        #0
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-content/plugins/woocommerce/includes/class-wc-autoloader.php(54):
        include_once()
        #1
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-content/plugins/woocommerce/includes/class-wc-autoloader.php(98):
        WC_Autoloader->load_file()
        #2 [internal function]: WC_Autoloader->autoload()
        #3
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-content/plugins/woocommerce/src/Internal/Utilities/LegacyRestApiStub.php(61):
        class_exists()
        #4 [internal function]:
        Automattic\WooCommerce\Internal\Utilities\LegacyRestApiStub::parse_legacy_rest_api_request()
        #5
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-content/plugins/woocommerce/src/Internal/Traits/AccessiblePrivateMethods.php(178):
        call_user_func_array()
        #6
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-includes/class-wp-hook.php(324):
        Automattic\WooCommerce\Internal\Utilities\LegacyRestApiStub::__callStatic()
        #7
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-includes/class-wp-hook.php(348):
        WP_Hook->apply_filters()
        #8
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-includes/plugin.php(565):
        WP_Hook->do_action()
        #9
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-includes/class-wp.php(418):
        do_action_ref_array()
        #10
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-includes/class-wp.php(813):
        WP->parse_request()
        #11
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-includes/functions.php(1336):
        WP->main()
        #12
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-admin/includes/post.php(1304):
        wp()
        #13
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-admin/includes/class-wp-posts-list-table.php(165):
        wp_edit_posts_query()
        #14
        /home/nbcnokcc/domains/mrwoodturner.co.za/public_html/wp-admin/edit.php(235):
        WP_Posts_List_Table->prepare_items()
        #15 {main}
        thrown

        1. Hi Annike, those indeed look like errors related to the advisory: https://developer.woocommerce.com/2024/06/19/developer-advisory-legacy-rest-api-error-in-woocommerce-9-0/

          The issue is likely resolved by manually updating the version or using the CLI to update. More details can be found in the above advisory.

  4. Thanks for the efforts to improve accessibility!

    1. Nadir Seghir Avatar
      Nadir Seghir

      Thank you for the excellent issues!

  5. Bet Hannon Avatar
    Bet Hannon

    Thanks for fixing these accessibility issues!

  6. Has this update resolved the following issues?

    https://developer.woocommerce.com/2024/01/16/woocommerce-8-5-1-issues-with-web-application-firewalls-modsecurity/

    Currently, as a temporary measure to resolve this issue, we have turned off the “command countermeasures” in the WAF of the X server.

    By using this version, will it be safe to turn on “Command Countermeasures”?

  7. Edith Allison Avatar
    Edith Allison

    Mandatory 2nd address line: I had to debug a site recently where Express checkout options Apple Pay and Google Pay failed due the 2nd line being mandatory but the customer not having stored a 2nd address line in their Apple Pay address. Might be worth adding a warning that making the 2nd address line mandatory can conflict with Apple / Google Pay.

  8. The new cart and checkout are looking good!

    What about code customization? Will it still work the same way as the older version?

    Great work!

    1. Hi Julien! The new blocks will continue to have functionality added over time.

      This is the future of the Checkout experience in WooCommerce, so this is where we will focus all new features and innovation.

      If you are a plugin developer, we have a tutorial explaining the basics of how to extend the new blocks experience.

      Because the blocks are so easy to add a page, you can create a new page in your store, and add the checkout block to test it out.

  9. Amazing work team! Originally we were considering changing over to Shopify due to the level of transactions we process is fairly significant and growing.

    However, with more of these features like the faster HPOS and Full-text index feature, these are really great for us to stay.

    You’ll find there’s more customers like myself who will jump to support and pay for your features and plans to get comparable benefits to Shopify or more!! I would prefer to stay with Woocommerce for it’s high level of customisation!

  10. Is there any info on how to customize (with code) the new blocks? It all sounds nice as long as you are ok with what you get by default, but I cannot find any docs anywhere on how to code the blocks,

    Thank you
    Alessio

    1. Nadir Seghir Avatar
      Nadir Seghir

      Hey! What block do you want to customize and what kind of customization are you looking for?

  11. Hello, good day. I really appreciate your powerful update, and this change was truly necessary, but unfortunately, it doesn’t allow for much custom sizing! Especially in the payment section, particularly for payment plugins like Zarinpal, Bank Mellat, and many plugins related to order dispatch timing, where sometimes the shipping price changes automatically! I would appreciate it if you could let me know when these bugs will be fixed?

    1. Hi, Hadi 👋🏽 Thanks for the feedback.

      We want to understand the issue you are having a little better. It sounds like you want to be able to further customize the checkout but are running into trouble with certain payment integrations like Zarinpal and Bank Mellat. Is that right?

      We have a GitHub Discussion channel specifically on the checkout. It might be helpful if you describe the issue you are having in greater detail there.

      Create a new GitHub Discussion on Checkout

Leave a Reply

Your email address will not be published. Required fields are marked *