WooCommerce 9.3: Optimizations, accessibility improvements, and more

WooCommerce 9.3 has been released on September 11th, 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.3.1

About:

  • ✅ Backwards compatible
  • Commits: 392
  • Contributors: 77

Coming soon mode: improvements and optimizations

Add site visibility badge to admin menu #50775 / Add site visibility settings confirmation modal #50759 / Add woocommerce_coming_soon option for all sites #50581 / Rename woocommerce_is_store_page to woocommerce_is_extension_store_page #50771

We’ve addressed various pieces of feedback we received by moving the site visibility badge to the admin menu and adding a confirmation modal when changing from a live site to coming soon mode. We also optimized the performance of all sites by preventing an unnecessary front-end query. Additionally, we’ve implemented a new filter to allow extensions to include their pages in the “store pages only” coming soon protection.


Improved product meta checkbox UI

Update product data meta box checkboxes UI #50619

We’ve improved the interface when managing product data in the Add Products screen. In accordance with W3C’s recommendations, the checkboxes shown in the header of the product data box are now shown before their descriptive labels. Along with this change, the spacing between checkbox items has been increased to improve readability.


Shortcode checkout accessibility improvements

Add aria-required attributes to WC form fields #48371

The aria-required="true" attribute has been added to required form fields on the shortcode checkout and whenever the woocommerce_form_field() function is used. The aria-required attribute was chosen over the required attribute to avoid backwards compatibility issues


More new features and updates

Significant reduction in plugin size

Image Optimization: Compress pattern placeholder images #50405

We’ve optimized the WooCommerce plugin and substantially reduced its file size. Compared to version 9.2, which was 20.5MB, version 9.3 has achieved a 27% overall size reduction. A key factor in this improvement was the compression of certain assets, shrinking them from 10MB to just 4MB. This considerable decrease in plugin size offers several benefits for WooCommerce users, including faster load times and reduced server storage requirements. For e-commerce stores, where performance is crucial, this optimization can lead to improved user experience amongst other benefits.

Improved wp-admin stability

[Remote Specs] Treat empty arrays as valid cached values #50521 / Make menu_task_count safer #50533 / Update AdditionalPayments task to use default gateway suggestion #50674 / Remove remote API call in “Grow your business” task #50479

Previously, there was a cache bug that caused requests to the WooCommerce.com API endpoints to affect the load times of wp-admin pages for merchants who have enabled marketplace suggestions. We’ve fixed the bug to ensure that an API failure does not impact the admin experience. We’ve also removed irrelevant API requests that may run on wp-admin pages.


API Updates

  • REST: Update product stock when removing line item from order #50606
  • Store API: Do not resume orders with pending status #50531
  • CYS – Move the ai/business-description endpoint to woocommerce admin API #50359
  • CYS – Move the ai/images endpoint to woocommerce admin API #50365
  • CYS – Move the ai/patterns endpoint to woocommerce admin API #50372
  • CYS – Move the ai/store-info endpoint to woocommerce admin API #50363
  • CYS – Move the ai/product endpoint to woocommerce admin API #50393

Other important information

Database updates

To improve performance, the woocommerce_coming_soon option is now set by default on all sites. #50581

The meta key used for coming soon mode has been updated to be stored in the user.woocommerce_meta, rather than the user.meta attribute. #50664

Security improvement: CSV Import

In #51344, we hardened the CSV product import process against sniffing content from server files outside of the WordPress install directory.

Remote error logging is coming in WooCommerce 9.4

As mentioned in our pre-release post, WooCommerce 9.3 was originally planned to include remote error logging – an opt-in feature that would allow stores to send error logs to Woo. During some final testing, we identified an issue with this feature that would make it harder for store owners to debug fatal errors. Therefore, we have disabled remote error logging in WooCommerce 9.3.1 – the version set as stable on WordPress.org – and plan to reintroduce it in WooCommerce 9.4.


Changelog

See all bug fixes and improvements
  • Fix – Revert update to React 18 in Checkout block. #51289
  • Fix – Add check to ensure themes API is safe #51081
  • Fix – CYS – Remove usage of prepare_item_for_response function in Images endpoint. #50923
  • Fix – Add ability for a screen reader to announce the current tab on a single product page. #50373
  • Fix – Add a label to the product pagination for the woocommerce pagination #49924
  • Fix – Add aria-current to the current link in My Account side nav #49800
  • Fix – Add aria-label on View order button to aid in accessibility for screen readers #49424
  • Fix – Add CSS outline for site visibility badge keyboard accessibility #50794
  • Fix – Add scope attribute and aria-label to the product attributes table #49768
  • Fix – Add to Cart with Options – Fix translation when used inside the Single Product block. #50628
  • Fix – Allow verified parameter to be set by REST API request #50525
  • Fix – Avoid PHP warnings if add-to-cart.php template does not pass aria-describedby_text #48969
  • Fix – Cart block: Strip HTML tags and decode HTML entities in quantity change notifications. #50541
  • Fix – Changed from using React.render to React.createRoot for marketing coupons as it has been deprecated since React 18 #48832
  • Fix – Changed from using React.render to React.createRoot for payment methods promotion, shipping settings region zone as it has been deprecated since React 18 #48835
  • Fix – Changed from using React.render to React.createRoot for print shipping banner as it has been deprecated since React 18 #48831
  • Fix – Changed from using React.render to React.createRoot for product-usage-notice-modal as it has been deprecated since React 18 #50765
  • Fix – Changed from using React.render to React.createRoot for wc addon tour as it has been deprecated since React 18 #48833
  • Fix – Changed from using React.render to React.createRoot for WCAdmin uses as it has been deprecated since React 18 #48785
  • Fix – Changed instances of prime marks inappropriately used when apostrophes are supposed to be used for some parts of WC Admin JS/TS/TSX files #50776
  • Fix – Clear product unique ID (global_unique_id) when duplicating products. #50629
  • Fix – Compatibility Layer: fix ‘woocommerce_before_single_product_summary’ hook position. #50392
  • Fix – CYS – Improve the error when a request fails due to permissions #50211
  • Fix – CYS – Update the “show_on_front” setting to “posts” to avoid overriding the “page” template. #50083
  • Fix – CYS: disable zoom out on fonts/color pairs iframe #50498
  • Fix – CYS: Fix auto scroll when a new block is added. #50431
  • Fix – CYS: Improve opt in flow #50529
  • Fix – Display address card for virtual products if shopper’s address is known #50127
  • Fix – Enable skipped E2E tests for attributes #50143 #50143
  • Fix – Ensure coupon errors are visible on block checkout when invalid coupons are removed. #50412
  • Fix – Ensure low and no stock email notification routine is triggered whenever product stock changes #49583
  • Fix – Ensure session object is initialized before attempting to get chosen shipping methods #50774
  • Fix – Ensure that the orders REST endpoint behaves the same as the UI when updating an order to remove a line item. #50606
  • Fix – Featured Product: Fix variable product Selection dropdown #50633 #50633
  • Fix – Fix “Product Meta” translations – Register the block server side. #50625
  • Fix – Fix: ensure the global product object is always ready for compatibility layer by disabling default render routine of Product Templates inner blocks. #49971
  • Fix – Fix activating the installed subscription when the user has multiple active licenses for the same product. #49803
  • Fix – Fix address heading level on My Account page. #49764
  • Fix – Fix an admin bar CSS positioning bug in WordPress.com on mobile #50709
  • Fix – Fix cart shortcode updates when not used on the main cart page. #50524
  • Fix – Fix core profiler checkbox vertical alignment and border color #50151
  • Fix – Fix core profiler set up my store button and TOS are too close to each other #50579
  • Fix – Fix e2e Google for WooCommerce strict mode violation error #50189
  • Fix – Fixed Core Profiler’s sticky footer button problem #50727
  • Fix – Fixed placeholders in the classic cart shipping calculator to update with country selection. #49684
  • Fix – Fixes a bug where some express payment buttons weren’t being rendered correctly #49304
  • Fix – Fix extensionCartUpdates to surface generic error messages, and include documentation for the error handling. #49762
  • Fix – Fix focus order on checkout block page. #49649
  • Fix – Fix navigation badge decreases when installing extension in “Grow your business task” #50584
  • Fix – Fix page titles of the cart and checkout page when using blocks and FSE themes. #49986
  • Fix – Fix rescheduling of actions that are blocked by other delayed actions #50082
  • Fix – Fix the “Add payment methods” link in LYS congrat screen redirects to a blank page #50609
  • Fix – Fix translation – Avoid registering blocks in the wrong context. #50615
  • Fix – Fix Product meta console error. #50680
  • Fix – Fix store-title endpoint – Pass default value to get_option. #50673
  • Fix – Hide save changes button in main payments screen #50064
  • Fix – In Remote Specs, treat empty arrays as valid cached values so individual engines can return default values. #50521
  • Fix – Keep focus on shipping option input once selected #49360
  • Fix – Make the matching variations alert a live region #50132
  • Fix – Only count published products in productCount #50503
  • Fix – Prevent fatal error if NULL is provided in array_search under Jetpack Stats #50696
  • Fix – Prevent Store API orders being placed with empty state #50028
  • Fix – Prevent sync-on-read from affecting results of HPOS diff CLI tool. #49726
  • Fix – Product Collection: Fix max price query to include prices less or equal to the given max value. #49917
  • Fix – Product Collection: fix the preview if used in Products by specific Category or Tag #49889
  • Fix – Product Price block: prevent price amounts from breaking into multiple lines #50660
  • Fix – Properly detect active plugins in multisite WP installations. #50417
  • Fix – Reduce error noise in the user profile screen, by removing the requirement for custom fields to have a class attribute. #48079
  • Fix – Remove Active Shipping Zones check for displaying shipping calculator on the Cart Page. #49214
  • Fix – Single product block – Fix translation for title and description in edit mode. #50599
  • Fix – Store API: Do not resume pending orders–create a new order instead #50531
  • Fix – Transform labels in shipping zone region selector to decode html entities #50694
  • Fix – Treat post_type=product as a shop page. #50567
  • Fix – Update product order status colors to ensure accessible color contrasts #49934
See all updates and tweaks
  • Update – Added more paths to remote logger query param whitelist #51108
  • Update – Update WooCommerce Shipping Promo Banner to install the latest version of WooCommerce Shipping instead of WCS&T. #50970
  • Update – Add abbreviations for fields GTIN, UPC, EAN, OR ISBN #50042
  • Update – Add additional fields to new product editor e2e tests. #50241
  • Update – Add confirmation prompt for site visibility settings when changing from live to coming soon mode #50759
  • Update – Add pattern validation for global_unique_id #50501
  • Update – Add remote logger as a log handler to wc logger #50430
  • Update – Add request_uri prop to remote logging data #50671
  • Update – Add woocommerce_coming_soon option for all sites #50581
  • Update – Comment: Fix typos in documentation. #50282
  • Update – CYS – Add tests for the Full Composability feature. #49748
  • Update – CYS – Run appropriate tests depending on the WordPress version. #50016
  • Update – CYS – Update icon and text colors in the assembler. #50478
  • Update – CYS: Improve opt-in flow fonts. #50086
  • Update – CYS: Improve opt-in flow patterns. #50080
  • Update – CYS: Improve tracking survey #50196
  • Update – CYS: Improve tracking survey #50354
  • Update – CYS: Update the tracking URL to the external Fiverr link in sidebar of the Add your logo screen. #50753
  • Update – Enable remote logging feature flag #50351
  • Update – feat: add aria-required attributes to WC form fields #48371
  • Update – Fixed log-out link behavior so that redirects work, and so that security nonces are automatically added to link in navigation menus. #49605
  • Update – Migrate LYS user meta #50664
  • Update – Move marketing task to things to do next task list #50487
  • Update – Move site visibility badge to admin bar. #50775
  • Update – Remove “Need help?” modal from onboarding #47812
  • Update – Remove all links from the CYS sidebars #50414
  • Update – Remove remote API call from marketing task #50479
  • Update – Remove WooCommerce Navigation client side feature and deprecate PHP classes. #50190
  • Update – Renamed columns inside In-App Marketplace > My subscriptions and added action to turn auto-renewal on for a subscription #49985
  • Update – Rename woocommerce_is_store_page to woocommerce_is_extension_store_page #50771
  • Update – Reverting the new buttonAttributes API. This will be included in a later release #50763
  • Update – Revert the Zoom Out feature for the CYS experience #50535
  • Update – Show expiring and expired notices to active and unconnected subscriptions #50383
  • Update – Store API: Remove the need for nonces when using cart tokens. Remove deprecated X-WC-Store-API-Nonce header. #50025
  • Update – Strip HTML tags from aria-label in wc_help_tip function #50103
  • Update – Text adjustments on shipping zones settings page #50136
  • Update – Update AdditionalPayments task to use default payment gateways #50674
  • Update – Update add product task button section UI #50580
  • Update – Update all blocks to use API Version 3. #48720
  • Update – Update Blueprint settings layout. #50724
  • Update – Update core profiler continue button container on extension screen #50582
  • Update – Update Store Alert actions to have unique keys. #50424
  • Update – Update WooCommercePayments task is_supported to use default suggestions #50585
  • Tweak – Add GTIN in structured data #50087
  • Tweak – Add link to title, remove link from a description, minor copy changes to site visibility settings page #50781
  • Tweak – Add the woocommerce_should_clear_cart_after_payment filter to influence whether the cart should be cleared after payment. #44515
  • Tweak – allows the quantity selector on block cart page to render as readonly when editable is false #49450
  • Tweak – Bump Jetpack COnnection, Jetpack Constants and a8c MC Stats #50471
  • Tweak – Extract the checkbox list option logic into its own component #50566
  • Tweak – Make geolocation_ajax_get_location_hash case-insensitive, to reduce the number of cache misses. #45439
  • Tweak – Optimize large image files #50517
  • Tweak – Product Collection: fix the PHP deprecated warning #50661
  • Tweak – Reduce core profiler sticky footer height #50788
  • Tweak – Remove colon from product data meta box checkboxes #50619
  • Tweak – Remove the code related to the automatic Products (Beta) -> Product Collection upgrade. #50440
  • Tweak – Set timeout to 2 seconds for helper product-usage-notice-rules endpoint request #50821
  • Tweak – Update size of site visibility badge. #50792
  • Tweak – Vertically center product meta elements #50826
See all features and additions
  • Add – Add an additional field for the email settings that sets the footer text color #49648
  • Add – Add blueprint behind a feature flag for testing purposes. #49763
  • Add – Add field for the email footer text color #49648
  • Add – Add function to clear system status theme info cache #50803
  • Add – Add methods required by extensions to control product feature usage based on subscription status. #50218
  • Add – Add parameter to avoid attempting to create the logs directory if it doesn’t exist #49766
  • Add – Add Pattern button to no blocks view on the CYS assembler #49981
  • Add – Add reactified main payments screen #49972
  • Add – Add reactify-classic-payments-settings feature flag #49966
  • Add – Add tracks for WordPress Importer/Export pages. #50769
  • Add – Add FilteredGetDataTrait, OrderAwareControllerTrait, and StatsDataStoreTrait for extension developers to reuse while creating custom Analytics #49425
  • Add – Implement server-side remote error logging #49599
  • Add – Inform screen reader users when mini cart updates #48295
  • Add – Integrate JS remote logging package in WooCommerce Admin #50134
  • Add – Product Collection: emit the JS event when PC block is rendered #50166
  • Add – Product Collection: Enable Context-Aware Previews by Adding usesReference to registerProductCollection #49796
  • Add – Track frequency of unhandled JS errors with MC Stats #50155
  • Add – Use MC Stats for PHP fatal error counting #49658
  • Add – [E2E tests]: Add product description using the block editor #50232 #50232
See all developer updates
  • Dev – Execute test env setup on host instead of wp-env container #51021
  • Dev – Added code docs with examples to the Analytics classes #49425
  • Dev – Add lost password e2e tests #50611
  • Dev – Add unit tests for the product_add_publish track. #49916
  • Dev – CI: introduce PHPUnit tests sharding. #50084
  • Dev – CI: minor speed boost of wp-env startup. #50445
  • Dev – CI: speedup assets size verification job execution time. #50178
  • Dev – CI: Use a single shard when re-running failed tests in CI #50492
  • Dev – CI config: update changes list to include more paths #50399
  • Dev – Clean up unused images #50516
  • Dev – CYS – Document possible Intro pages #50171
  • Dev – CYS – Move the “ai/patterns” endpoint to woocommerce admin API. #50372
  • Dev – CYS – Move the “ai/store-info” endpoint to woocommerce admin API #50363
  • Dev – CYS – Move the ai/business-description endpoint to woocommerce admin API #50359
  • Dev – CYS – Move the ai/store-title endpoint to woocommerce admin API #50352
  • Dev – CYS – Move the ai/images endpoint to woocommerce admin API #50365
  • Dev – CYS – Move the ai/product endpoint to woocommerce admin API. #50393
  • Dev – CYS: add E2E tests for fonts installation. #50210
  • Dev – E2E tests: add a flaky test reporter for Core e2e tests #50259
  • Dev – E2E tests: add an option to skip the env setup script running before test execution #50620
  • Dev – E2E tests: add buildkite-test-collector for blocks e2e tests #50642
  • Dev – E2E tests: add environment reporter #49988
  • Dev – E2E tests: add hpos-disabled env and tagged tests with hpos tag #50448
  • Dev – E2E tests: fixed broken logo picker tests #50473
  • Dev – E2E tests: fix flakiness in page-loads customer page test #50559
  • Dev – E2E tests: fix flakiness in product attributes test #50485
  • Dev – E2E tests: removed Github reporter #50256
  • Dev – E2E tests: Removed unnecessary pause in the test #50043
  • Dev – E2E tests for verifying approve, spam and reply to product reviews. #50060
  • Dev – Fix E2E tests SKU field id #49729 #49729
  • Dev – Fixes a flaky product variations e2e test #50807
  • Dev – Fix Metrics CI job #50214
  • Dev – Fix optional param in PHPdoc for WC_Admin_Marketplace_Promotions to generate code-reference w/o warnings #50732
  • Dev – Fix the Metrics job by adding a missing NVM install step #50482
  • Dev – Make the Metrics tests use utilities provided by the updated @wordpress/e2e-test-utils-playwright package. #50626
  • Dev – Mark ReportTable tableData prop as not required #50816
  • Dev – Monorepo: enable new linting rules for PHP (PSR-4 naming, Strict types declaration). #49438
  • Dev – Monorepo: tweak Webpack loaders paths filtering for better build perfromance. #49714
  • Dev – move block theme docs to docs site folder #50638
  • Dev – move part of checkout docs to main docs folder #49984
  • Dev – Move ReportError to @woocommerce/components as AnalyticsError #50108
  • Dev – moving product collection docs to main docs folder #50368
  • Dev – Reduce duplicated code in Analytics controllers, unify their behavior and API. #49425
  • Dev – Reduce the amount of duplicated code in Analytics DataStores. #49425
  • Dev – Removed defaultProps from React functional components since they will be deprecated for React 19 #50266
  • Dev – Removed directive to disable woocommerce_coming_soon in e2e tests so that we get better test coverage #50344
  • Dev – Render a React placeholder for offline and WooCommerce Payments settings sections #50008
  • Dev – Replace Automattic\WooCommerce\Admin\API\Reports\*\Query classes with a single GenericQuery class. #49425
  • Dev – Switch render() to createRoot().render() to use React 18 features. #48843
  • Dev – Tests: moved api core tests as a suite in e2e-pw #50024
  • Dev – Tweak the lost password e2e logic #50666
  • Dev – Update @wordpress/e2e-test-utils-playwright core dependency to wp-6.6 #50274
  • Dev – Updated e2e tests docs to clarify the use of environments #50530
  • Dev – Updated the workflow prompting for testing instructions to only run once (preventing double comments) #50034
  • Dev – Update E2E tests for linked list and variation creation with new component changes. #50128
  • Dev – Update lys e2e tests to test with both classic and block themes #50657
  • Dev – Update Playwright to 1.46.1 from 1.45.1 #50772
  • Dev – Update WP version to 6.6 in Blocks wp-env config. #49704
  • Dev – Use stricter text selector on test #50848
  • Dev – [Filter Products by Price]: Update view when changing the min/max value #50651 #50651
See all enhancements
  • Performance – Cache order dates in options for performance. #50066
  • Performance – Compress pattern placeholder image assets #50405
  • Performance – Improve performance of maybe_assign_default_product_cat by only dropping cache and term recounting if changes were made in the database #50006
  • Performance – Improve setup_tasks_remaining performance #50655
  • Enhancement – Add a filter to override the SKU database lock. #49755
  • Enhancement – Add email type to Checkout block email field. #48611
  • Enhancement – Add filter woocommerce_is_store_page to modify whether Coming Soon mode considers a URL a store page or not. #50174
  • Enhancement – Add username in email reset-password link #49737
  • Enhancement – CYS: improve CTA #50278
  • Enhancement – Ensure wccomHelper data is only loaded on the Extensions page where it’s needed. #49758
  • Enhancement – Fixed minor issues in the developer documentation recently added by public resources team #50845
  • Enhancement – Hide zoomed product images for screen readers. #50003
  • Enhancement – Improve hover style on product tabs when using the Minimal style in the Product Details block #50605
  • Enhancement – Make screen readers announce notice messages once page loads. #50061
  • Enhancement – Refactor: Migrate the All Products block to API version 3 #50203
  • Enhancement – Remove opacity from the hover style of the mini cart button #50240
  • Enhancement – Use standard link color in legal disclaimers on core profiler #50830
  • Enhancement – Add query params masking to remote logger #51108

View the full changelog.

Get WooCommerce 9.3

👉 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

frosso
imanish003
simonporter007
octaedro
alexookah
heitorspedroso
jorgeatorres
ilyasfoo
Maikuolan
Hug0-Drelon
psealock
kalessil
thealexandrelara
vladolaru
danielwrobert
chihsuan
DAnn2012
tarunvijwani
rjchow
moon0326
piinthecloud
mattsherman
adimoldovan
naman03malhotra
Konamiman
Luc45
shaybanshee
webdados
coreymckrill
DustyReagan
thilinah
nathanss
gigitux
nigeljamesstevenson
kmanijak
barryhughes
WunderBart
alexedwardjones
opr
Brianmitchtay
79mplus-admin
Marianne380
Manussakis
roykho
jimjasson
adrianduffell
gedex
vedanshujain
nielslange
mdperez86
wavvves
Saggre
mikejolley
amesplant
senadir
mcliwanow
tomalec
albarin
tjcafferkey
R33D3M33R
samueljseay
lanej0
veljkho
Aljullu
louwie17
KokkieH
alvarothomas
puntope
dinhtungdu
alexflorisca
rodelgc


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


One response to “WooCommerce 9.3: Optimizations, accessibility improvements, and more”

  1. Fantastic update, thanks! We see performance upgrade on our site.

Leave a Reply

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