WooCommerce 9.0: Pre-release updates

WooCommerce 9.0 is coming soon…

The post will track the work we do as we prepare to release 9.0 as well as provide a preview of what’s to come in this new version.

📀 This release includes a database update.

Release Schedule:

  • 🚀 WooCommerce 9.0 — Out now
    Checkout the Release post.

Hey folks, on Wednesday, May 22, 2024, we kicked-off our Code Freeze ahead of the release of WooCommerce 9.0. As we begin the testing phase, and get the release ready for Beta, we wanted to share some spoilers and document any updates to the expected release timeline. 

Check back here for more updates ahead of the WooCommerce 9.0 release, scheduled for June 18, 2024. 

What’s coming in 9.0

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.


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 and the place order button. Accessibility improvements were also made to enhance the shopping experience, addressing feedback from Amber Hinds from Equalize Digital.


Product Collection Blocks The next iteration: 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. We’ve also added a preview label and tooltip, clarifying that actual products displayed on the Frontend may differ based on the viewing context.


Rename Classic Block Templates: 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. Check the new names here.


A more secure, legible System Status Report (SSR): 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.

HTML Tag Update in Block Templates: 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 Changes

  • 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)

Database updates

This change adds a new update function to add the woocommerce_show_lys_tour option (#47634)

Changelog

See all bug fixes and improvements
  • 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 Blocks\Installer\create_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 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 – 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
  • 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
  • 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

View the changelog.

Update timeline

✅ Code Freeze

Added: May 23, 2024

On May 22, 2024 we implemented the Code Freeze and began preparing to release the Beta. Stay tuned for the upcoming version in the WooCommerce Beta Tester plugin

WooCommerce 9.0 Beta

Added: May 28, 2024

We released 9.0 Beta 1 on May 28th, but have since released a more recent version below.

WooCommerce 9.0 Beta 2

Added: May 30, 2024

We’ve released a second version of the Beta which includes some important bug fixes.

WooCommerce 9.0 RC

Added: June 4, 2024

This RC includes new additions to the changelog abave as well as one revert:

  • Revert “Add phone number to my account shipping address #47062

👉 To Test: Use the WooCommerce Beta Tester plugin to try beta versions. Or download the latest beta release from WordPress.org.

🐞 Found a Bug? Please submit a report on GitHub

WooCommerce Release 9.0

Released: June 18, 2024

In order to ensure proper testing of this release after the inclusion of recent backport fixes in WooCommerce 9.0 [1, 2], we are moving our scheduled release from June 11, 2024 to June 18, 2024


Keep yourself in the loop!

This field is hidden when viewing the form
This field is hidden when viewing the form
This field is hidden when viewing the form


8 responses to “WooCommerce 9.0: Pre-release updates”

  1. When will the new WooCommerce product editor be out of beta?

    1. pia8c Avatar

      Hi, Nam. We don’t have a date yet for when this feature will be considered default. We will make sure to announce to the community with ample time before we set it to default.

      In the coming weeks we will also be proving more resources, new features, and documentation to make this transition clean.

    1. Justin Avatar

      Hi YK, thanks for reaching out again about this issue.

      WooCommerce 9.0 will include the new wc_order_attribution_use_base64_cookies filter, which enables Base64 encoding for order attribution cookie data, thus avoiding the specific substrings that have caused false positives in some WAFs.

      It can be enabled by adding this snippet:
      add_filter( 'wc_order_attribution_use_base64_cookies', '__return_true' );

      Please let us know if that helps solve your problem!

      1. @Justin
        Where should I put this snippet in the new version?

        1. Justin Avatar

          Hi @YK,

          You’d usually add the snippet to your child theme’s functions.php file. There’s a nice explanation in this video: https://www.youtube.com/watch?v=xQRLVBeAVt8

          Alternatively, you could create a custom plugin and add the snippet there.

  2. Jefferson Avatar
    Jefferson

    Could the product EAN field be defaulted to the product editor in the product editor?

  3. Refreshed our website earlier today and we get a ‘Critical Error’ – We are using an Elementor theme. When Woo is deactivated – the site works perfect. When I activate Woo – site breaks again w/ ‘Critical Error’. I’ve tried this several times, deactivating all plugins and it’s 100% the Woo plugin. We are also using the latest version of WP.

Leave a Reply

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