WooCommerce 9.1: Coming soon, product lookup optimizations, and checkout styling galore

WooCommerce 9.1 has been released on July 11, 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.1.0


  • ✅ Backwards compatible
  • Commits: 364
  • Contributors: 74

Coming soon mode can officially be enabled

Add – Launch your store feature flag. #48244

Coming soon…to a store launch near you: Everyone loves a little bit of anticipation, whether it is getting excited about a new store launch, or shiny new products page, stores will have an added tool in their arsenal with coming soon mode.

The Coming soon mode is controlled by a new tab in WooCommerce settings where users can restrict the feature to store pages only as well as enable sharing the pages with a private link. Users can edit the Coming Soon page using the Block Editor. Head to Appearance > Editor > Templates > Page: “Coming soon” to edit a coming soon page.

Product lookup tables can be optimized

Add – An optional optimized alternative way of filling/updating the table. #47700
Add – A new set of CLI tools to manage the table regeneration/updates. #47311

Optimization in Product Lookup: A few years ago, we welcomed product lookup tables for more performant opportunities when dealing with product search and organization. To navigate the complexity of some products, we have improved upon this feature by introducing an optional optimized way of filling/updating the table, as well new CLI tools to manage updates. Checkout @konamiman ‘s post on the improvements.

Helpful styling updates added to checkout blocks

Update – Block based checkout input styling updates. #46362
Update – Spacing improvements to checkout block. #47565
Update – Display return to cart link on mobile devices. #48103

Checkout Blocks Usability Improvements: Checkout blocks are constantly improving, with small changes making a world of difference. In 9.1 we will see the return to cart link staying visible in mobile, even in a zoomed in state, style updates for the checkout input fields, and spacing improvements for usability in both desktop and mobile.

Take a peek at some of the styling changes in the checkout blocks!

There are new inheritance rules for global colors affecting labels, values, and outlines. You can navigate to Apperance » Editor » Pages » Checkout and choose a preset, such as Rust and apply the styles to input labels, values, outlines, checkboxes and radio buttons. Additionally, active and focused scenarios will appear in secondary color. It is also possible to choose your own color scheme using a palette dropper and apply it to one element. This can now affect the global styling of the checkout block.

We have ensured that the Return to Cart link can also be displayed when using a mobile device. This way, mobile users can easily navigate back to the cart in case they need to adjust their order.

Additionally, dropdown chevron icons now indicate their state by orientation.

Shop accounts have enhanced accessibility

Fix – Accessibility enhancement for the whole shop accounts section. #47144

Accessibility Enhancements for Shop Accounts: The entire shop accounts section is receiving an accessibility enhancement, resolving a number of issues submitted by Amber Hinds of Equalize Digital. The updates include alerts and error messages from the login page, registration form, and forget password, address, and account details.

More feature updates

Variable product inline actions are now available: In 9.1 it is now possible to edit some Product Variation properties directly from the variations table using inline actions. Actions like changing the variation image, stock management, and pricing changes will all be managed through the variations table.

Detailed information about Cart/Checkout types are visible in the system report tool: The 9.1 enhancement allows for visually seeing what types of Cart/Checkout are being used, informs the merchant if the Cart/Checkout page’s content is being overridden by custom template content, and presents a warning when both Cart/Checkout versions are being included.

API Updates

  • REST API: Updates schema for rate_id property (#47779)
  • Fix: Permissions check for customer downloads REST API (#47854)
  • No longer updates the last_access field unnecessarily (#47912)
  • REST API: Check if stock adjustments when updating order line items (#47784)
  • Conditionally allow stock_quantity to be non-integer in REST API product schema (#48541)

Other important information

This release contains important security updates

📆 Two low-severity fixes are being released in 9.1

A non-severe security fix has been implemented in 9.1. This change reduces the potential for the wrong order data to be fetched within a multisite network, where 2 or more sites within the network are all using WooCommerce. Specifically, it reduces the potential for the wc_get_customer_last_order() function to inadvertently return an order that belongs to a different user. You can view the PR here.

Additionally, a text area sanitization has been included to avoid a possible html injection.

Database updates

📀 Add – Enable store feature flag is re-added to the DB. #48244

Re-enables the Launch Your Store feature flag after it’s late exclusion from the 9.0 release in #48231


See all bug fixes and improvements
  • Security – Improve the way we cache information about recent customer activity, to prevent the wrong data being retrieved in some specific conditions involving multisite networks. #49373
  • Fix – Prevent HTML tags being rendered on order confirmation and emails #49370
  • Fix – Prevent BatchProcessingController from cleaning up processors after a premature shutdown. #49243
  • Fix – CYS: fix not template set correctly. #49113
  • Fix – CYS: Disable readonly mode only when full composability feature flag is enabled. #48752
  • Fix – CYS: fix crash of CYS on WordPress 6.6 #48664
  • Fix – Revert “Set stock quantity value as 0 by default (#48448)” #48863 #48863
  • Fix – Add product id to product_edit_view track in classic product edit screen #47853
  • Fix – Address responsiveness issues in orders list table. #47684
  • Fix – Add screen-reader-text styles to e-mails. #47738
  • Fix – Adds new hook woocommerce_rest_delete_shipping_zone_method which will fire after a shipping zone method is deleted via the REST API. #47862
  • Fix – Allow products with non-integer stock to be created via REST API. #48541
  • Fix – Calling $product->get_status() after $product->save() on a new product now returns correct status. #48241
  • Fix – Change the cursor to a pointer when hovering over the mini cart #46996
  • Fix – CYS – Hovering over the header or footer on the “Design your homepage” section should not make them highlighted. #48358
  • Fix – CYS – Select the next block after deleting the selected one (instead of the header). #48316
  • Fix – CYS: apply white color to the heading elements in the core/cover block #48447
  • Fix – CYS: Fix crash homepage #48205
  • Fix – CYS: Fix CSS header.#48389
  • Fix – CYS: fix logic to disable mover buttons.#48502
  • Fix – CYS: fix tooltip position.#48495
  • Fix – CYS: hide popover when the mouse pointer leaves the site preview and then back. #48394
  • Fix – Do not create empty webhooks after failure to deliver deleted webhook. #48480
  • Fix – Ensure attribute slugs with multibyte characters are handled property when outputting attributes in the REST API products endpoint #48198
  • Fix – Ensure available stock is updated correctly when updating line items in orders via the REST API. #47784
  • Fix – Ensure data filtered by woocommerce_logger_log_message does not carry across multiple log handlers #48336
  • Fix – Ensure getPreviousDate default behaviour is comparing previous_year #47951
  • Fix – Ensure permission checks for the customer downloads REST API endpoint use the correct customer ID. #47854
  • Fix – Ensure that data containing multibyte characters and/or slashes that is appended to log entries gets encoded and rendered correctly #48341
  • Fix – Fix a bug with the woocommerce_get_default_value_for_{key} filter that was preventing setting a falsey value on a checkbox (i.e. to uncheck it dynamically) #48031
  • Fix – Fix activation limit for single license subscriptions on woocommerce.com #47643
  • Fix – Fix a null parameter being passed into strpos in Admin/Orders/PageController.php #48476
  • Fix – Fix bug where Core Profiler initiates a Jetpack connection even if it was already connected before #48345
  • Fix – Fix bumped down data when analytics chart current period contains 29th Feb #45874
  • Fix – Fix coming soon footer banner doesn’t display properly on tablet and mobile #47980
  • Fix – Fix e2e tests about the tabs selection during the product creation experience #47860
  • Fix – Fix edit variable product test #48288
  • Fix – Fix FlexSlider thumbnail animation for variable products with default form values on small devices.#48137
  • Fix – Fix location settings not updated in tax task #48606
  • Fix – Fix LYS private link URL parameter regardless of permalink settings #48425
  • Fix – Fix product archive page not hidden behind the coming soon page #48522
  • Fix – Fix Product Gallery block error on revisiting Single Product template without fully reloading the page. #47636
  • Fix – Fix product tracks when importing #47857 #47857
  • Fix – Fix some issues in performance tests #47735 #47735
  • Fix – Fix the issue that the React-powered admin routing pages added after the filter initialization could not be displayed. #47696
  • Fix – Fix the terms counts in wcadmin_product_add_publish event. #48194
  • Fix – Fix two products being added to cart when Geolocate (with page caching support) was enabled and AJAX add to cart buttons disabled #47761
  • Fix – Fix untranslated strings on CYS and marketplace #48127
  • Fix – Honor empty “additional content” setting in e-mails. #47809
  • Fix – Improve consistency of Setting-> Gateway Manage button for WooPayments gateway #48212
  • Fix – In general, the last_access field of a REST API key should only be updated once-per-request.
  • Fix – Make coupon metadata read robust against wrongly stored product related metadata #48362
  • Fix – Moved WooCommerce block categories registration on the server-side, fixing a bug that would show warnings to developers trying to hook new blocks in such categories. #47836
  • Fix – Possible availability of unpublished coupons on sites with an object cache has been addressed through improved cache management. #47739
  • Fix – Prefer update URLs over PluginURI in My Subscriptions for plugins without a subscription. #47950
  • Fix – Prevent on-sale badge from showing on top of the coming soon banner #48082
  • Fix – Prevent Product Gallery from being inserted on Posts and Pages. #48228
  • Fix – Product Collection: prevent throwing warnings in some circumstances when rendering block #48530
  • Fix – Product Price: Narrow down the ancestors of the block so it’s available in inserter only in places where block makes sense #47802
  • Fix – Re-enable variable product E2E test #48294 #48294
  • Fix – Related Products: hides unusable options from Inspector Controls #47845
  • Fix – Run possibly_add_template_id function in woocommerce_rest_prepare_product_variation_object hook #48325
  • Fix – Scroll to view the templates section on the status page #48125
  • Fix – Set stock quantity value as 0 by default #48448 #48448
  • Fix – Update plugin installation error logger to use plugin track key for extension name #47786
  • Fix – When a product attribute is updated, unchanged values should not be reset to their defaults. #48120
  • Fix – WooCommerce: fixes the checks when migrating the product form template #48386
  • Fix – [CYS Full Composability] Ensure that the assembler doesn’t crash when the feature flag is enabled, but the site doesn’t have the latest version of Gutenberg. #47546
See all features and additions
  • Add – Add CLI tools for the product attributes lookup table #47311
  • Add – Add ‘woocommerce_order_note_deleted’ hook for order note deletions. #47916
  • Add – Add CLI tools to enable and disable HPOS compatibility mode. #48117
  • Add – Added ‘woocommerce_restore_order_item_stock’ filter for restored line item stock on canceled orders #40848
  • Add – Add ErrorBoundary component for handling unexpect errors #48250
  • Add – Add filter to dynamically exclude a page from Coming soon mode #47787
  • Add – Add Printful product placement to Add Products task #48520
  • Add – Add skipped test custom reporter to surface skipped tests in CI runs #48195
  • Add – Add the ability to test experimental blocks via the Advanced > Features menu of WooCommerce settings. #47701
  • Add – Add woocommerce_manage_stock option to the default_option_permissions list in the Options rest controller #48239
  • Add – CYS: add CTA to our Fiverr Logo Maker landing page. #48486
  • Add – CYS: add pattern category in the block toolbar. #48501
  • Add – CYS: Add the Delete button to the Block Toolbar. #48143
  • Add – CYS: Ensure that toolbar appears only when the homepage sidebar is open #48115
  • Add – CYS: Show Patterns from PTK#48207
  • Add – CYS: Show popover when the user clicks on the pattern #47583
  • Add – Determine _product_template_id from ‘woocommerce_product_editor_determine_product_template’ filter #47762
  • Add – Display an admin notice in Setting and Extension pages when there are expiring subscriptions and connected account doesn’t have a payment method. #47141
  • Add – Enhancements to background batch processing. #48078
  • Add – Highlight the pattern when the user hovers it. #47415
  • Add – LYS – Add ‘Remove test orders’ for WooPayments #47832
  • Add – PFT: introduce controller and initialize it #48221
  • Add – REST API: extened shipping_classes namespace with the /suggest-slug endpoint #47896
  • Add – Updated shipstation copy #48549
  • Add – WooCommerce: create a new product_form CPT #48073
  • Add – WooCommerce: introduce product-editor-template-system feature flag #48136
  • Add – WooCommerce: update CPT product_form posts when plugin updates #48265
  • Add – WooCommerce Blocks: Added a GitHub Action to create issues for flaky E2E tests #47758
See all updates and tweaks
  • Update – Add feature flag for Printful placement #49104
  • Update – Add a control to enable a separator on the Checkout block’s “Checkout Terms” block. This will enable a separator above the block that can be turned off in case the block is moved. #47565
  • Update – Change the item schemas for Orders and Order Refunds API endpoints to correctly specify that the rate_id property in a tax_line object is an integer, not a string #47779
  • Update – Clean up theming sections in WooCommerce blocks docs #48420
  • Update – CYS – Exclude two testimonials patterns from registering since they depend on Jetpack. #48233
  • Update – CYS – Fix active/inactive patterns for each of the sections in the assembler. #48458
  • Update – CYS – Install the patterns during the CYS flow if the transient is not set. #48274
  • Update – CYS – Redirect to the same section after installing fonts or patterns on the assembler. #48227
  • Update – CYS – Show tooltips on the Shuffle and Delete buttons in the assembler toolbar. #48465
  • Update – CYS: set new default patterns. #48467
  • Update – Display return to cart link on mobile devices. #48103
  • Update – Docs: update documentation regarding Compatibility Layer #48456
  • Update – Expand block templates documentation #48247
  • Update – Experimental blocks now have “(Experimental)” suffix #48071
  • Update – fix: label improvement on my order page template #48374
  • Update – Improve WooCommerce block template names in the Add New Template screenn #48106
  • Update – Invalidate cache for SiteGround Speed Optimizer #48523
  • Update – Optimize the regeneration of the product attributes lookup table #47700
  • Update – Product Archive templates: Replace the default block from Products (Beta) to Product Collection block #48112
  • Update – Product Block Editor: disable the product-editor-template-system feature flag as default, even for the development environment. #48378
  • Update – Product Collection: Handpicked Products filter now allows searching from 2 characters and more and updates available results as you type #48379
  • Update – Product Elements: hide Product Summary from Single Product block and only show Excerpt variation #48253
  • Update – Product Rating Stars and Product Rating Counter from the inserter #48229
  • Update – Products (Beta): hide block from inserter in favor of Product Collection block #48204
  • Update – Product Summary: Increase the length of the description from 55 to 100 words (max supported by core/post-excerpt) #47651
  • Update – Reduced the number of FlexSlider animation engines from 2 to 1, now always using CSS3 transitions. #46564
  • Update – Replace the use of options endpoint with the LYS API endpoint to query woocommerce_admin_launch_your_store_survey_completed option. #47915
  • Update – The archive product title will now be updated to the title of the current shop page. If the page does not exist, it will fall back to “Shop”. #48255
  • Update – Toggle LYS feature flag on for 9.1 #48244
  • Update – Update input fields styles of the Checkout block #46362
  • Update – WooCommerce: store the template description in the product_form excerpt property. #48327
  • Update – Wrap activity panels in error boundary #48415
  • Update – [CYS] Ensure fetch PTK patterns requests are always done async to improve performance. #47551
  • Update – [CYS] Refactor the pattern registration and add patterns from the PTK API. #47306
  • Update – [CYS] Remove the restriction to TT4 and allow users to proceed to the pattern assembler with any block themes. Update intro page design. #46916
  • Update – [CYS] Show a message when tracking is not allowed in patterns and add the ability for users to opt-in and fetch patterns. #48095
  • Tweak – Update Printful label #48778
  • Tweak – Add a close button to dismiss store alerts #48453
  • Tweak – Adds a defensive check to reduce error log noise when regenerating images. #47785
  • Tweak – Adds best practice advice to the API key generation screen. #48483
  • Tweak – CYS – Update the copy for the intro tour. #48202
  • Tweak – CYS: Refactor routing approach.#48312
  • Tweak – Include ‘original_post_status’ in HPOS edit form. #48196
  • Tweak – Minor improvements to BlockTemplatesController instantiation #48107
  • Tweak – Only load ‘productCount’ and ‘experimentalBlocksEnabled’ settings in admin #48152
  • Tweak – Product Editor: Skip momentarily the ‘can create a variation option and publish the product’ E2E test #47618
  • Tweak – Remove checkstyle.xml file #47844
  • Tweak – Remove unused woocommerce_task_list_prompt_shown option #48304
  • Tweak – Update coming soon banner text to use translation function #47742
  • Tweak – Update LYS survey completion track props #47985
  • Tweak – Update printful copy. #48626
  • Tweak – Update WC blocks e2e tests to WordPress 6.6 #48436
  • Tweak – Verify if the coming soon cache is displayed when launching the store and alerts the user if it is still present. #48586
See all developer updates
  • Dev – Improve E2E selector by making it stricter. Wait for text due to AJAX call.#48471
  • Dev – Added e2e test to check ability to connect to woocommerce.com #48028
  • Dev – Added test enviornments #48101
  • Dev – Add previous error class to checkout endpoint response #47489
  • Dev – Add test for wcpay_connect_account_clicked track #48347
  • Dev – Add tests for some product editor tracks #48245
  • Dev – Blocks E2E: Remove confusing utilities in favor of native locator functionality. #47904
  • Dev – CI: merge test jobs #48175
  • Dev – Clean up eslint comments after rules update in Blocks E2E tests. #47875
  • Dev – Clean up tasklist progression headercard experiment #47983
  • Dev – Clean up welcome modal code #48346
  • Dev – Do not dismiss the error snackbar automatically, fix E2E test #48192 #48192
  • Dev – E2E test: Improve analytics data spec by disabling the task list reminder bar #48357
  • Dev – E2E tests: configure snapshotPathTemplate #47773
  • Dev – E2E tests: fixing flakiness in checkout block and launch your store tests #48016
  • Dev – E2E tests: fixing flaky assembler homepage test #48356
  • Dev – E2E tests: fixing flaky checkout block test #48527
  • Dev – E2E tests: fixing flaky color palette picker test #48496
  • Dev – E2E tests: fixing flaky connect to woo test #48613
  • Dev – E2E tests: fixing flaky customize store transitional test #48532
  • Dev – E2E tests: fixing flaky logo picker test #48503
  • Dev – E2E tests: fixing flaky merchant create variable product test #48276
  • Dev – E2E tests: fixing flaky merchant customer list test #48463
  • Dev – E2E tests: fixing flaky merchant product attribute test #48230
  • Dev – E2E tests: fixing flaky merchant user create and logging #48446
  • Dev – E2E tests: fixing flaky shopper checkout coupons #48555
  • Dev – E2E tests: fixing flaky shopper search browse products in the shop #48560
  • Dev – E2E tests: fixing flaky store owner core profiler test #48430
  • Dev – E2E tests: fixing skipped mini cart test #47756
  • Dev – E2E tests: fixing skipped tests #47859
  • Dev – E2E tests: improve existing merchant e2e tests for creating page and post #48162
  • Dev – E2E tests: improve existing util for inserting blocks via shortcut #48225
  • Dev – E2E tests: improving cart util and updating relevant tests #48475
  • Dev – E2E tests: updated the test ignore pattern for Gutenberg tests project #47764
  • Dev – E2E tests: update tests checking if blocks can be added #48211
  • Dev – E2E tests: update the report configuration for all core jobs #48424
  • Dev – Fix a filters block e2e test that was mistakenly merged incorrectly.#48122
  • Dev – Fixing a flaky core profiler e2e test #47917
  • Dev – Fix path to test results for api core tests #48490
  • Dev – Implement unit test for tracks wcadmin_page_view, wcadmin_tasklist_view, wcadmin_tasklist_task_completed, wcadmin_tasklist_click #47876
  • Dev – Include blocks e2e in ci.yml #48224
  • Dev – Migrate release smoke workflow to the new CI setup #48113
  • Dev – Product Editor: Move variation pricing fields to General tab. #48155
  • Dev – Remove the isFeaturePlugin function, which was used to turn off experimental block styling (but was non functional). Also remove associated code in FeatureGating class. #47866
  • Dev – Remove WOOCOMMERCE_BLOCKS_PHASE completely from the monorepo, introduce BUNDLE_EXPERIMENTAL_BLOCKS just for the purpose of building/bundling experimental blocks #47807
  • Dev – Skipped flaky test: test_order_updated_webhook_delivered_once #48064
  • Dev – Streamline the implementation of the Blocks’ E2E utilities. #47660
  • Dev – Streamline the usage of WP CLI in Blocks E2E tests. #47869
  • Dev – Tweak the paths that should trigger e2e tests. #48067
  • Dev – Unskip some tests that have been skipped for flakiness #47772
  • Dev – Update @wordpress/env version to 9.7.0 #48443
  • Dev – Updated Core Profilers XState version to V5 #48135
  • Dev – Update Playwright from 1.41.1 to 1.44.1 (latest) and fixed tests #48291
  • Dev – Update pnpm-lock with updated React #47973
  • Dev – Update the React version in the pnpm-lock file #47993
  • Dev – Update the URLs for order-related e2e tests to use new URLs from HPOS #46397
  • Dev – [e2e tests] Fix e2e test reports paths #48320
See all enhancements
  • Performance – Add DISTINCT keyword for smaller response and performance. #48139
  • Performance – CYS – Optimize the Choose a professionally designed theme intro page image. #48566
  • Performance – Replaced classnames package with the faster and smaller clsx package. #47760
  • Performance – Revert changing the title of the edit comments screen when editing a review. #48485
  • Enhancement – Accessibility enhancement for the whole shop accounts section #47144
  • Enhancement – Add information about block/shortcode/template usage on Cart and Checkout pages to the WC system report. #48300
  • Enhancement – CYS: add shuffle feature. #47356
  • Enhancement – CYS: allow to the user to move the pattern. #47322
  • Enhancement – Enhancement editor loading speed #47425
  • Enhancement – Handle core profiler get countries error #48317
  • Enhancement – If a variable product doesn’t have a Product Image but variations do have images, the zoom and flex slider will be initiated as expected #47714
  • Enhancement – Improve spacing between steps in the Checkout block on mobile and desktop #47565
  • Enhancement – Increase connection timeout to 30 seconds for the requests in WCCOM connection flow #47842
  • Enhancement – Limit coming soon options API call to home screen #48303
  • Enhancement – Modified order status tooltip labels #47861
  • Enhancement – Optimize text wrapping for wc admin pages #48131
  • Enhancement – Remove the previous product management experience #47814

View the full changelog.

Get WooCommerce 9.1

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

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



4 responses to “WooCommerce 9.1: Coming soon, product lookup optimizations, and checkout styling galore”

  1. The “coming soon” feature should have been a separate plugin. It seems crazy to include it in WooCommerce core since it will probably never be used again after the store is launched, yet the functions are hooked into all fronts end requests. Madness in terms of performance/efficiency.

    1. Adrian Duffell Avatar
      Adrian Duffell

      Hi Stan,

      Thanks for taking a look at the coming soon feature and providing feedback. While the feature is intended for new store owners, many existing store owners will also find it useful to hide their store while they make updates.

      A small check is now made on the front-end to determine coming soon vs live mode. We conduct comprehensive performance checks on every release and found the testing of 9.1.0 to fall within acceptable limits. Our goal is that sites in live mode essentially have the feature disabled. If you are finding performance is affected, please file a bug report on GitHub so we can investigate and make improvements swiftly.

      1. While you’re playing with very minor things, big issues are just omited. For example adding VAT EU additional field (or any other field) in blocks checkout page should be done long ago. Functions.php file or third-party plugins aren’t working so we have to revert to old checkout page. Not good!

        1. Nadir Seghir Avatar
          Nadir Seghir

Leave a Reply

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