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


  • ✅ 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.


See all bug fixes and improvements
  • Security – Redacted sensitive info from SSR for GitHub #48570
  • Security – Prevent HTML & JS injection attacks on registration and checkout forms when the Order Attribution is enabled. #48348
  • Fix – Fix settings-api textarea validation to prevent insertion of iframes in description areas by default #48432
  • Fix – #47626 changed the classes on the legacy admin settings save button and broke saving standard tax rates #48201
  • Fix – Revert “Remove customer-effort-score-tracks” feature flag #48235 #48235
  • Fix – Fix db update notice redirection bug where it redirects without checking for db update action. </details> <details> <summary>Changelog Entry Comment</summary> #48163
  • Fix – Add missing URL to discover more link in LYS tour #48109
  • Fix – Fix: “On Sale” collection isn’t displaying on Editor side </details> <details> #47994
  • Fix – Make the plugin autoinstall process more robust #47798
  • Fix – Prevent tracking files from being enqueued on the front end. #47938
  • Fix – Fix: Product Collection block does not display properly when editing template/post #47871
  • Fix – Added useRef to ensure confetti animation is only run once #47838
  • Fix – Fixed a fatal error when programmatically using the WC_Discounts::class in a context where no cart exists. #47589
  • Fix – Fixed shipping flat price change to free shipping when shipping cost represented using decimal separators and thousands separators. #46857
  • Fix – Product Collection: fix the incompatibility of Query Pagination block with Product Collection #47749
  • Fix – Add missing line item data to the REST API refunds schema in versions 2 and 3 #47254
  • Fix – Allow category and tag taxonomy filters on the Product Collection block to see more than the first 10. #47155
  • Fix – A number of e2e fixes for flaky tests #47562
  • Fix – Avoid a warning in PHP 8.3 with some edge case uses of array_sum #47595
  • Fix – Blocks: Fix JS unit tests #47516
  • Fix – Catch NotFoundException before woocommerce_get_batch_processor #46975
  • Fix – Check each pacakge’s chosen shipping rate against each valid rate for that package #47716
  • Fix – Correctly clear out state and postcode when switching countries. #47369
  • Fix – Correctly load up Cart/Checkout translations on Windows machines. #47625
  • Fix – CYS: fix color picker E2E test #47274
  • Fix – Filter by Attribute: fix potential reading from undefined error #47699
  • Fix – Fix: handle undefined templateSlug in Product Collection tracking utils #47504
  • Fix – Fix: Product Collection Block Respects ‘Out of stock visibility’ Setting #47537
  • Fix – Fix an accessibility error in the add to cart button template. #46897
  • Fix – Fix an issue in which a warning is emitted when placing an order using Checkout block. #47633
  • Fix – Fix broken checkout address forms layout #47131
  • Fix – Fix broken db update button on homescreen #47608
  • Fix – Fix core profiler email field is not positioned correctly in mobile screens #47077
  • Fix – Fix coupon rest api returning 500 error on delete. #47474
  • Fix – Fix dates dropdown in admin list order page where it wasn’t filtered by order type. #47440
  • Fix – FIxed a bug where shop page isn’t recognized as a WooCommerce page when WordPress is installed in a subdirectory with permalink set to plain. #46664
  • Fix – Fixes regarding authentication and non-existing products in the receipts rendering engine #47300
  • Fix – Fix failed to load coming-soon resources #47073
  • Fix – Fix flaky Attributes and Variations E2E tests #47471 #47471
  • Fix – Fix GLA site verification with coming soon mode #47140
  • Fix – Fix LYS site icon size #47689
  • Fix – Fix missing shipping-recommendation task #47117
  • Fix – Fix orders search filter position in admin list table. #47640
  • Fix – fix PHP 8 warning in BlocksInstallercreate_pages() callback when other filters have removed pages #47094
  • Fix – Fix registration of plugin on woocommerce.com if plugin is already active on site. #46780
  • Fix – Fix RIN Display Logic for Banner Alert Notifications #47167
  • Fix – Fix tasklist_payments_options to record only shown payment gateways #47713
  • Fix – Fix Tax reports not showing correct totals in analytics #46248
  • Fix – Fix undefined variable $exlude_paths #47490
  • Fix – Fix warnings from using fse theme json filter #47631
  • Fix – Fix width of the button to set the variation prices #47682 #47682
  • Fix – Fix admin_url usage in Task List button links for Customize Store and Launch Your Store tasks. #47010
  • Fix – Make REST order queries involving ‘customer’ field compatible with HPOS in v2 API. #46878
  • Fix – Prevent empty checkboxes added by Additional Checkout Fields API showing in the order confirmation when the order was placed using the shortcode checkout experience. #47333
  • Fix – Prevent product from being saved prematurely when updated via REST API #46674
  • Fix – Product Collection – Fix edge cases in Price Range filter around value parsing #47354
  • Fix – Reenable global styles in coming soon entire site template #47388
  • Fix – Replace forward slashes in additional fields IDs with hyphens. #47650
  • Fix – Select the first shipping rate when local pickup is enabled and customer switches to shipping. #47120
  • Fix – Show Germany state field in Checkout block. #47319
  • Fix – Switch marketplace promotions from Action Scheduler to transient. #47262
  • Fix – Update color contrast for Checkout fields. Update color contrast for notice buttons. Return focus when closing mini cart drawer. Return focus when closing shipping calculator. #47470
  • Fix – Update coupon_usage for failed & trashed orders. #47125
  • Fix – Update delete item meta query to format supported by wpdb::get_table_from_query() #46692
  • Fix – Updated the PHP DocBlock for WC_CLI_Runner::register_route_commands to correctly specify the first parameter’s type as being a WC_CLI_REST_Command object rather than a string. #47599
  • Fix – Update the version number of some methods in AbstractTemplateCompatibility #47118
  • Fix – Use the default ordering of states in the Checkout block #46656
  • Fix – [CYS]: Fix event name when starting the no-AI flow. #47181
  • Fix – [CYS] Fix bug making the AI flow fail on the same prompt. #46872
See all features and additions
  • Add – Show notice for expiring subscriptions #47004
  • Add – Add custom fonts via wp_theme_json_data_theme filter for coming soon pages #47417
  • Add – Added phone number field to Shipping Address form under My Account #47062
  • Add – Added the wc_product_pre_has_unique_sku filter hook to allow SKU uniqueness to be determined externally #46763
  • Add – Add filter to convert WooCommerce slug for plugin dependencies #46707
  • Add – Add hooks to customize the order receipt generation #46224
  • Add – Adds 3 additional UTM parameters recognized in GA4 documentation. #47639
  • Add – Adds a wc/v3/refunds REST API endpoint so refunds can be queried collectively, unconnected to their orders #46895
  • Add – Add tracks events for the LYS badge #46509
  • Add – Allow HPOS CLI cleanup tool to remove metadata for deleted orders. #46970
  • Add – Append coming soon tracks prop globally #47644
  • Add – Comment: Added feature to redirect back to LYS from CYS if the referrer is LYS. #47654
  • Add – Filter to apply Base64 encoding to order attribution cookies #47597
  • Add – For shared subscriptions, My Subscriptions now shows “Shared with you” and the email address of the person who shared it with you. #46229
  • Add – New product editor: Add ‘placeholder’ attribute to category field in Simple Product Template #46938
  • Add – Product Collection: Add preview mode on Editor side #46369
  • Add – Product Collection: collections that don’t inherit query from template are non-filterable #45820
  • Add – REST API: Add product variation type to response when getting variations. #47377
  • Add – Return HPOS edit links for calls to get_edit_post_link() on placeholder posts. #47149
  • Add – Show an message in the plugin table list for WooCommerce extensions that are either expired or expiring. #47076
  • Add – Show the label for freemium products in the in-app marketpalce #45982
See all updates and tweaks
  • Update – Toggle LYS feature flag off for 9.0 #48231
  • Update – Add a new update function for WC 9.0 to add woocommerce_show_lys_tour option. #47634
  • Update – Add aria-label to customer account block link when in icon-only display mode. #46899
  • Update – Add busy animation for save button in settings screen #47626
  • Update – Added padding-left: 15px to the copy link to provide equal spacing around the button #47313
  • Update – Add UTM tags to all product links in core profiler Free features step #47397
  • Update – Always show pickup location address and details and truncate pickup details. #47173
  • Update – Applies wp_plugin_dependencies_slug filter to get the correct plugin name in PluginVersionRuleProcessor. #47235
  • Update – Avoid writing an empty line to a log file if the log entry is empty. #47091
  • Update – Changed the Form Step blocks in the Checkout block so that the step nunbers cannot be turned off individually. This is now a global setting on the Checkout Fields block that will affect all child blocks. The FormStep component in the checkout pacakge remains unchanged. #47479
  • Update – Classic Templates: Renamed blocks representing classic templates from “WooCommerce XYZ Block” to “XYZ (Classic)” #44931
  • Update – Disable auto zoom when focusing on input for core profile #47400
  • Update – Display the total price in the place order button. #47083
  • Update – Display Import Product task item text and header copies when merchant indicates they are already selling #47164
  • Update – Do not display smart app banner on the core profiler, LYS, and CYS pages #47429
  • Update – Ensure the woocommerce_format_log_entry filter hook still has access to the log source value #46851
  • Update – Hide progress bar when entering Design With AI from Entrepreneur signup flow. #47574
  • Update – Improvements to HPOS settings screen. #47370
  • Update – In blocks migrate @wordpress/components Button to Ariakit, replace __experimentalRadio/RadioGroup with Ariakit Button. #45974
  • Update – Inject order attribution checkout fields (only once) on a wider set of checkout form actions. #46834
  • Update – LYS – Use flow layout for the coming soon template #47335
  • Update – LYS: disables the “Save changes” button until changes are made. #47316
  • Update – Make order attribution data globally accessible client side. #46965
  • Update – Move country to be the first field in Checkout block. #47375
  • Update – Product Collection: remove Beta label #47572
  • Update – Redirect old market-place to new market-place pages #47276
  • Update – Refactor coming soon entire page to wrap under cover block #46914
  • Update – Remove admin toolbar button hover background #47314
  • Update – Remove noindex robot call from lys coming soon pages #47178
  • Update – Remove title from checkout page #47529
  • Update – Rename and sort filter options in “Add a filter” in Analytics. #46955
  • Update – Replace div element with main in block templates #47119
  • Update – Replace Options API usage with LaunchYourStore endpoint for LYS #47252
  • Update – Replace the Legacy REST API with a stub that always returns an error #40627
  • Update – Replace the Testimonials single default image. #47535
  • Update – Return users to LYS after completing essential task #47606
  • Update – Toggle LYS feature flag on for post-8.9 #46853
  • Update – Update @automattic/tour-kit to 1.1.3 and @automattic/components to 2.1.1 #47129
  • Update – Update delivery titles & pickup options; refine shipping selector layout & address field visibility in the Checkout block. #46083
  • Update – Updated the toolbar’s store link based on the site’s visibility settings. #47315
  • Update – Update experiment name for the new product editing screen. #47647
  • Update – Update Octokit from 2.1.0 to 3.1.2 and updated variable names #42891
  • Update – Update the display logic of company name, address line 2 and phone number fields and allow making the address line 2 field required. #47160
  • Update – Update the WooCommerce Status page to use the full plugin version to show dev, Beta and RC versions as opposed to only the milestone number #46906
  • Update – Use the term attribute sort order for displaying the “Filter by attribute” terms. #47616
  • Update – Use Woo branded colors for LYS confetti #47334
  • Update – When the total shipping cost is 0 the order summary in the Cart and Checkout blocks shows “FREE” instead of 0.00 #47553
  • Update – Woocommerce: update code to data TS changes #46907
  • Update – Wrap LYS private link exclusion logic in an overall check #47690
  • Tweak – Add aria-label to account page #43696
  • Tweak – Correct the close days for the flaky test stalebot workflow #47484
  • Tweak – Fix coming soon page mobile UI issue #47491
  • Tweak – Make sure “Change Address” button in Cart block is accessible. #47460
  • Tweak – Reduce the number of tags in the plugin’s readme file, to avoid warnings. #47688
  • Tweak – Remove “Powered by WooCommerce” footer #47075
  • Tweak – Removed bold highlight from selected payment method in the Checkout block. This has been replaced with a border highlight. #47412
  • Tweak – Remove repetitive words #47158
  • Tweak – Remove unused order type registration property. #46843
  • Tweak – Respect locale settings when formatting order counts in admin orders page. #47373
  • Tweak – Update core profiler industry list #47605
  • Tweak – Update the order summary on Cart & Checkout with some minor visual changes #45767
  • Tweak – Update XPF currency symbol to XPF and change its default formatting. #46960
  • Tweak – Use a real em dash character (—) in the coming soon template #47394
  • Tweak – Use site editor to set fonts, set default fonts to cardo and inter, add type safety for filter #47613
See all developer updates
  • Dev – Add a feature flag for full composability and the Pattern Toolkit #47392
  • Dev – Add an API test for the new refunds endpoint #47340
  • Dev – Add Buildkite test reporting (sanitized) back using production account #47558
  • Dev – Add help text under “Include downloads” toggle #46752 #46752
  • Dev – Add new disableHpos test env variable in ci-job utility #47619
  • Dev – Add Playwright performance tests to Product editor #47590 #47590
  • Dev – Add the optional property for ci jobs #47261
  • Dev – Block E2E: Eliminate side effects through improved test isolation #46125
  • Dev – Blocks E2E: Align ESlint and TS configs with Gutenberg & fix flaky tests. #47228
  • Dev – Blocks E2E: Fix flaky block insertion tests #47213
  • Dev – Blocks E2E: Fix flaky Product Collection tests #47211
  • Dev – Blocks E2E: Refactor Playwright configs and CI workflow #46409
  • Dev – Blocks E2E: Remove discouraged waitForTimeout from tests #47214
  • Dev – Blocks E2E: Remove obsolete waitForSiteEditorFinishLoading utility. #47547
  • Dev – Blocks E2E: Remove the DB snapshot on env reset #47416
  • Dev – Blocks E2E: Wait for Site Editor canvas loader in the enterEditMore() utility. #47541
  • Dev – Disable pre-publish panel #47430 #47430
  • Dev – E2E tests: disable broken tests #47268
  • Dev – E2E tests: disable woocommerce_coming_soon during test environment setup #47024
  • Dev – E2E tests: don’t exit if the consumer token was not cleared in teardown #47020
  • Dev – E2E tests: fix cleanup of created test pages and migrate to using fixtures #46944
  • Dev – E2E tests: fixing flaky admin marketing test #47665
  • Dev – E2E tests: more fixes for tests with Gutenberg active #46861
  • Dev – Fix for a couple of flaky e2e tests #47253
  • Dev – Load e2e test helper (child) themes via .wp-json instead of via WP-CLI. #47080
  • Dev – Monorepo utils: add support for github events in ci-jobs tool #46922
  • Dev – Move pricing features to General tab #47435 #47435
  • Dev – Move the PHP tests with WP nightly back into CI #47568
  • Dev – pnpm-lock.yaml update #47575
  • Dev – Product Collection: add tracking to Editor filters usage #46545
  • Dev – Remove BuildKite reporter from e2e tests #47449
  • Dev – Remove not used feature flags #47150 #47150
  • Dev – Remove upload plugin test from daily reporting #47067
  • Dev – Restore the playwright/no-hooks linter rule introduced in #46432 and accidentally removed in #47228. #47500
  • Dev – This PR fixes a minor typo in the Exposing your data in the Store API doc. #43488
  • Dev – Try out the BuildKite Test Analytics in CI #47202
  • Dev – Update cart/checkout usage of the @wordpress/components Slot Fill #47105
  • Dev – Update docs about blocks styling to clearly state global styles are the recommended approach #47269
  • Dev – Update events that should trigger the test job(s) #47612
  • Dev – Update fast-xml-parser from 4.2.4 to 4.2.5 #41982
  • Dev – Update pnpm to 9.1.0 #47385
  • Dev – Update the Blocks JS tests to React 18 #47383
See all enhancements
  • Performance – Add experimental support for FTS indexes in HPOS. Additionally, revert existing HPOS search queries to use post like structure. #46130
  • Performance – Add index on SKU filed in wc_product_meta_lookup table #47051
  • Performance – Create a hook to filter the woocommerce blocks that can be registered #47066
  • Performance – CYS > Ensure get_patterns_ai_data_post is triggered only if AI enabled and improve performance. #46999
  • Performance – Free some in-memory usage when doing batch processing in HPOS #47159
  • Performance – HPOS – Made the query for retrieving meta keys more performant #46985
  • Performance – Remove duplicate css code from any woo scss file #47122
  • Enhancement – Add Business Services to the Extensions catalogue #47303
  • Enhancement – Added a “manual_update” parameter to the Orders REST API endpoint that will make it so that, when set to “true”, status changes to an order will be attributed to a specific user in the order notes. #46900
  • Enhancement – Add support for FI and SE postcode validation #45480
  • Enhancement – Add support for insert_or_update for better concurrency. #47610
  • Enhancement – Add woocommerce_order_received_verify_known_shoppers filter to Order Confirmation template #46957
  • Enhancement – Enable guest users to visualize shipping/billing information on the order received page. #47477
  • Enhancement – Fix: Reset password form missing required indicator #47229
  • Enhancement – Improved readability and better UX for GitHub bug reports, by optimizing the format of the SSR #47088
  • Enhancement – Mark the checkout block sidebar as sticky on desktop. #47376
  • Enhancement – Replace copy: List Price to Regular Price #47658

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.



15 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
        Error message: Uncaught Error: Class “WC_Legacy_API” not found in
        Stack trace:
        #2 [internal function]: WC_Autoloader->autoload()
        #4 [internal function]:
        #15 {main}

        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. […] WooCommerce 9.0: Our most accessible checkout and much more […]

  5. Thanks for the efforts to improve accessibility!

    1. Nadir Seghir Avatar
      Nadir Seghir

      Thank you for the excellent issues!

  6. Bet Hannon Avatar
    Bet Hannon

    Thanks for fixing these accessibility issues!

  7. Has this update resolved the following issues?


    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”?

  8. 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.

  9. 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.

Leave a Reply

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