=== WooCommerce ===
Contributors: automattic, woocommerce, mikejolley, jameskoster, claudiosanches, rodrigosprimo, peterfabian1000, vedjain, jamosova, obliviousharmony, konamiman, sadowski, wpmuguru, royho, barryhughes-1, claudiulodro, tiagonoronha, ryelle, levinmedia, aljullu, nerrad, joshuawold, assassinateur, haszari, mppfeiffer, nielslange, opr18, ralucastn, tjcafferkey, danielwrobert, patriciahillebrandt, albarin, dinhtungdu, imanish003, karolmanijak, sunyatasattva, alexandrelara, gigitux, danieldudzic, samueljseay, alexflorisca, opr18, tarunvijwani, pauloarromba, saadtarhi, bor0, kloon, coreymckrill, jorgeatorres, leifsinger, neosinner
Tags: online store, ecommerce, shop, shopping cart, sell online
Requires at least: 6.9
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 10.9.4
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Everything you need to launch an online store in days and keep it growing for years. From your first sale to millions in revenue, Woo is with you.

== Description ==

[WooCommerce](https://woocommerce.com/woocommerce/) is the open-source ecommerce platform for WordPress.

Our core platform is free, flexible, and amplified by a global community. The freedom of open-source means you retain full ownership of your store’s content and data forever.

Whether you’re launching a business, taking brick-and-mortar retail online, or developing sites for clients, use WooCommerce for a store that powerfully blends content and commerce.

- **Create beautiful, enticing storefronts** with [themes](https://woocommerce.com/product-category/themes/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) suited to your brand and industry.
- **Increase revenue** with an optimized [shopping cart experience](https://woocommerce.com/checkout-blocks/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) that converts.
- **Customize product pages in minutes** using modular [product blocks](https://woocommerce.com/document/woocommerce-blocks/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).
- Showcase physical and digital goods, product variations, custom configurations, instant downloads, and affiliate items.
- Sell [subscriptions](https://woocommerce.com/products/woocommerce-subscriptions/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), [bookings](https://woocommerce.com/products/woocommerce-bookings/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), or [memberships](https://woocommerce.com/products/woocommerce-memberships/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), with our developer-vetted extensions.
- **Rise to the top of search results** by leveraging [WordPress’ SEO advantage](https://www.searchenginejournal.com/wordpress-best-cms-seo/).
- **Build on a platform that scales.** Get flexible ecommerce for [high-volume stores](https://woocommerce.com/high-volume-stores/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

= ALL THE TOOLS YOU NEED TO SELL =

Built-in tools and popular integrations help you efficiently manage your business operations. Many services are free to add with a single click via the optional [Setup Wizard](https://woocommerce.com/document/woocommerce-setup-wizard/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

- **Choose how you want to get paid**. Conveniently manage payments from the comfort of your store with [WooPayments](https://woocommerce.com/payments/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) (Available in the U.S., U.K., Ireland, Australia, New Zealand, Canada, Spain, France, Germany, and Italy). Securely accept credit cards, mobile wallets, bank transfers, and cash thanks to [100+ payment gateways](https://woocommerce.com/product-category/woocommerce-extensions/payment-gateways/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) – including [Stripe](https://woocommerce.com/products/stripe/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), [PayPal](https://woocommerce.com/products/woocommerce-gateway-paypal-checkout/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), and [Square](https://woocommerce.com/products/square/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).
- **Configure your shipping options**. Print USPS labels right from your dashboard and even schedule a pickup with [WooCommerce Shipping](https://woocommerce.com/products/shipping/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) (U.S.-only). Connect with [well-known carriers](https://woocommerce.com/product-category/woocommerce-extensions/shipping-methods/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) such as UPS and FedEx – plus a wide variety of delivery, inventory, and fulfillment solutions for your locale.
- **Simplify sales tax**. Add [WooCommerce Tax](https://woocommerce.com/products/tax/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) or [similar integrated services](https://woocommerce.com/product-category/woocommerce-extensions/tax?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) to make automated calculations a reality.

= Grow your business, add features, and monitor your store on the go =

WooCommerce means business. Keep tabs on the performance metrics most important to you with a powerful and flexible central dashboard built into WooCommerce.

Expand your audience across marketing and social channels with [Google Ads](https://woocommerce.com/products/google-ads/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), [HubSpot](https://woocommerce.com/products/hubspot-for-woocommerce/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), [Mailchimp](https://woocommerce.com/products/mailchimp-for-woocommerce/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), and [Facebook](https://woocommerce.com/products/facebook/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) integrations. You can always check out the in-dashboard [Marketing Hub](https://woocommerce.com/document/marketing-hub/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) for fresh ideas and tips to help you succeed.

Enhance store functionality with hundreds of free and paid extensions from the [WooCommerce Marketplace](https://woocommerce.com/products/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing). Our developers [vet each new extension](https://woocommerce.com/document/marketplace-overview/#section-6?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) and regularly review existing extensions to maintain Marketplace quality standards. We are actively [looking for products that help store builders create successful stores](https://woocommerce.com/document/marketplace-overview/#section-2?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

Manage your store from anywhere with the free WooCommerce [mobile app](https://woocommerce.com/mobile/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) (Android and iOS). Spoiler alert: Keep an ear out for the slightly addictive "cha-ching" notification sound each time you make a new sale!

= Own and control your store data – forever =

With [WooCommerce](https://woocommerce.com/woocommerce/), your data belongs to you. Always.

If you opt to share [usage data](https://woocommerce.com/usage-tracking/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) with us, you can feel confident knowing that it’s anonymized and kept secure. Choose to opt-out at any time without impacting your store.

Unlike hosted ecommerce solutions, WooCommerce store data is future-proof; you’re free to export all your content and take your site to any platform you choose. No restrictions.

= Why developers choose (and love) WooCommerce =

Developers can use [WooCommerce](https://woocommerce.com/woocommerce/) to create, customize, and scale a store to meet a client’s exact specifications, making enhancements through extensions or custom solutions.

- Leverage [hooks and filters](https://woocommerce.com/document/introduction-to-hooks-actions-and-filters/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) to modify or create functionality.
- Integrate virtually any service using a robust [REST API](https://developer.woocommerce.com/docs/getting-started-with-the-woocommerce-rest-api/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) and webhooks.
- Design and build custom content blocks with React.
- [Inspect and modify](https://developer.woocommerce.com/docs/category/extension-development/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) any aspect of the core plugin code.
- Speed up development with a lightning-fast [CLI](https://developer.woocommerce.com/docs/category/wc-cli/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

The core platform is tested rigorously and often, supported by a dedicated development team working across time zones. Comprehensive documentation is updated with each release, empowering you to build exactly the store required.

= Be part of our growing international community =

WooCommerce has a large, passionate community dedicated to helping merchants succeed – and it’s growing fast.

There are [WooCommerce Meetups](https://woocommerce.com/meetups/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) in locations around the world that you can attend for free and even get involved in running. These events are a great way to learn from others, share your expertise, and connect with like-minded folks.

WooCommerce also has a regular presence at WordCamps across the globe – we’d love to meet you.

= Contribute and translate =

WooCommerce is developed and supported by Automattic, the creators of WordPress.com and Jetpack. We also have hundreds of independent contributors, and there’s always room for more. Head to the [WooCommerce GitHub Repository](https://github.com/woocommerce/woocommerce?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) to find out how you can pitch in.

WooCommerce is translated into multiple languages, including Danish, Ukrainian, and Persian. Help localize WooCommerce even further by adding your locale – visit [translate.wordpress.org](https://translate.wordpress.org/projects/wp-plugins/woocommerce/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

= Connection to WooCommerce.com =

You can connect your store to [WooCommerce.com](https://woocommerce.com/) to manage your subscriptions on WooCommerce Marketplace and receive product updates without leaving WordPress admin. Connection also enables installation of purchased products right from WooCommerce.com and streamlines access to technical support. If you’d like to learn about what data is gathered and how it is used, please refer to our [Privacy Policy](https://automattic.com/privacy/).

== Frequently Asked Questions ==

= Where can I find WooCommerce documentation and user guides? =

For help setting up and configuring WooCommerce, please refer to [Getting Started](https://woocommerce.com/documentation/plugins/woocommerce/getting-started/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) and the [New WooCommerce Store Owner Guide](https://woocommerce.com/guides/new-store/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

For extending or theming WooCommerce, see our [documentation](https://github.com/woocommerce/woocommerce/tree/trunk/docs), as well as the [Plugin Developer Best Practices](https://github.com/woocommerce/woocommerce/blob/trunk/docs/extension-development/extension-development-best-practices.md).

= Where can I get help or talk to other users about WooCommerce Core? =

If you get stuck, you can ask for help in the [WooCommerce Support Forum](https://wordpress.org/support/plugin/woocommerce/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) by following [these guidelines](https://wordpress.org/support/topic/guide-to-the-woocommerce-forum/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), reach out via the [WooCommerce Community Slack](https://woocommerce.com/community-slack/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing), or post in the [WooCommerce Community group](https://www.facebook.com/groups/advanced.woocommerce?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) on Facebook.

= Where can I get help for extensions I have purchased from the WooCommerce Marketplace? =

For assistance with paid extensions from the WooCommerce Marketplace: first, review our [self-service troubleshooting guide](https://woocommerce.com/document/woocommerce-self-service-guide/). If the problem persists, kindly log a support ticket via [our helpdesk](https://woocommerce.com/my-account/create-a-ticket/). Our dedicated Happiness Engineers aim to respond within 24 hours.

= I’m having trouble logging in to WooCommerce.com – what now? =

First, troubleshoot common login issues using this helpful [step-by-step guide](https://woocommerce.com/document/log-into-woocommerce-com-with-wordpress-com/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing). Still not working? [Get in touch with us](https://woocommerce.com/contact-us/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

= Will WooCommerce work with my theme? =

Yes! WooCommerce will work with any theme but may require some additional styling. If you’re looking for a theme featuring deep WooCommerce integration, we recommend [Storefront](https://woocommerce.com/storefront/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

= How do I update WooCommerce? =

We have a detailed guide on [How To Update WooCommerce](https://woocommerce.com/document/how-to-update-woocommerce/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

= My site broke – what do I do? =

Start by diagnosing the issue using our helpful [troubleshooting guide](https://woocommerce.com/documentation/get-help/troubleshooting-get-help/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

If you noticed the error after updating a theme or plugin, there might be compatibility issues between it and WooCommerce. If the issue appeared after updating WooCommerce, there could be a conflict between WooCommerce and an outdated theme or plugin.

In both instances, we recommend running a conflict test using [Health Check](https://woocommerce.com/document/troubleshooting-using-health-check/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) (which allows you to disable themes and plugins without affecting your visitors) or troubleshooting the issue using a [staging site](https://woocommerce.com/document/how-to-test-for-conflicts/#section-3?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing).

= Where can I report bugs? =

Report bugs on the [WooCommerce GitHub repository](https://github.com/woocommerce/woocommerce/issues?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing). You can also notify us via our support forum – be sure to search the forums to confirm that the error has not already been reported.

= Where can I request new features, themes, and extensions? =

Request new features and extensions and vote on existing suggestions on our official [feature request board](https://woocommerce.com/feature-requests/woocommerce?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing). Our Product teams regularly review requests and consider them valuable for product planning.

= WooCommerce is awesome! Can I contribute? =

Yes, you can! Join in on our [GitHub repository](https://github.com/woocommerce/woocommerce/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) and follow the [development blog](https://woocommerce.wordpress.com/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) to stay up-to-date with everything happening in the project.

= Where can I find REST API documentation? =

Extensive [WooCommerce REST API Documentation](https://developer.woocommerce.com/docs/apis/rest-api/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) is available.

= My question is not listed here. Where can I find more answers? =

Check out [Frequently Asked Questions](https://woocommerce.com/document/frequently-asked-questions/?utm_medium=referral&utm_source=wordpress.org&utm_campaign=wp_org_repo_listing) for more.

== Installation ==

= Minimum Requirements =

* PHP 7.4 or greater is required (PHP 8.0 or greater is recommended)
* MySQL 5.5.5 or greater, OR MariaDB version 10.1 or greater, is required
* WordPress 6.9 or greater
* (Recommended) WordPress [memory limit](https://woocommerce.com/document/increasing-the-wordpress-memory-limit/) of 256 MB or greater.
* (Recommended) [HTTPS](https://woocommerce.com/document/ssl-and-https/) support.

= Automatic installation =

Automatic installation is the easiest option -- WordPress will handle the file transfer, and you won’t need to leave your web browser. To do an automatic install of WooCommerce, log in to your WordPress dashboard, navigate to the Plugins menu, and click “Add New.”

In the search field type “WooCommerce,” then click “Search Plugins.” Once you’ve found us,  you can view details about it such as the point release, rating, and description. Most importantly of course, you can install it by! Click “Install Now,” and WordPress will take it from there.

= Manual installation =

Manual installation method requires downloading the WooCommerce plugin and uploading it to your web server via your favorite FTP application. The WordPress codex contains [instructions on how to do this here](https://wordpress.org/support/article/managing-plugins/#manual-plugin-installation).

= Updating =

Automatic updates should work smoothly, but we still recommend you back up your site.

If you encounter issues with the shop/category pages after an update, flush the permalinks by going to WordPress > Settings > Permalinks and hitting “Save.” That should return things to normal.

= Sample data =

WooCommerce comes with some sample data you can use to see how products look; import sample_products.xml via the [WordPress importer](https://wordpress.org/plugins/wordpress-importer/). You can also use the core [CSV importer](https://woocommerce.com/document/product-csv-importer-exporter/?utm_source=wp%20org%20repo%20listing&utm_content=3.6) or our [CSV Import Suite extension](https://woocommerce.com/products/product-csv-import-suite/?utm_source=wp%20org%20repo%20listing&utm_content=3.6) to import sample_products.csv

== Changelog ==

= 11.0.0 2026-08-04 =

**WooCommerce**

* Fix - Add a compatibility shim for the removed product block editor block registry to avoid third-party extension fatals. [#65500](https://github.com/woocommerce/woocommerce/pull/65500)
* Fix - Add compatibility shims for the removed block templates PHP API to avoid third-party extension fatals. [#65503](https://github.com/woocommerce/woocommerce/pull/65503)
* Fix - Add per-period `refunds` field to the legacy REST sales report so consumers can compute net sales per day or month (fixes #27552, #42694). [#65467](https://github.com/woocommerce/woocommerce/pull/65467)
* Fix - Add referrerPolicy to address autocomplete fetch requests to ensure Referer header is sent even with restrictive site policies. [#62967](https://github.com/woocommerce/woocommerce/pull/62967)
* Fix - Addressed cache invalidation gaps for product instance caching refresh. [#65431](https://github.com/woocommerce/woocommerce/pull/65431)
* Fix - Add the WooCommerce debug group to HPOS CLI debug messages. [#65701](https://github.com/woocommerce/woocommerce/pull/65701)
* Fix - Align email order item names consistently after product thumbnails. [#66141](https://github.com/woocommerce/woocommerce/pull/66141)
* Fix - Align Woo Home in-app promo banner styling with updated admin card patterns. [#65660](https://github.com/woocommerce/woocommerce/pull/65660)
* Fix - Allow decimal stock quantities below 1 to remain in stock when the `woocommerce_stock_amount` filter is overridden with `floatval`. The integer cast inside `WC_Abstract_Product::validate_props()` truncated values like `0.5` to `0`, incorrectly flipping the product to "Out of stock". [#65023](https://github.com/woocommerce/woocommerce/pull/65023)
* Fix - Allow the "Regenerate the product attributes lookup table" tool (and the related abort and resume tools) to run via the REST API instead of failing with an "Invalid nonce" error. [#66082](https://github.com/woocommerce/woocommerce/pull/66082)
* Fix - Allow users with the `view_woocommerce_reports` capability to access the Analytics Leaderboards REST endpoint and view leaderboard data. [#65492](https://github.com/woocommerce/woocommerce/pull/65492)
* Fix - Avoid a critical Site Health warning when WooCommerce cannot verify uploads directory protection. [#65757](https://github.com/woocommerce/woocommerce/pull/65757)
* Fix - Block add to cart: adding a product that is in the cart only inside a bundle (or only as a booking, add-on configuration, or recipient-differentiated line) now adds a new standalone line instead of showing an error or changing the existing line's quantity. [#65869](https://github.com/woocommerce/woocommerce/pull/65869)
* Fix - Blocks: Fix JS crash when the store returns a non-Error value in useCollection; convert it to a proper Error instance so the error boundary handles it gracefully. [#64218](https://github.com/woocommerce/woocommerce/pull/64218)
* Fix - Blueprint: export SQL steps using a table prefix placeholder instead of the source site's database prefix, so settings can be imported on sites that use a different table prefix. [#65942](https://github.com/woocommerce/woocommerce/pull/65942)
* Fix - Cast refund amount values to float for PHP 8.1 TypeError fix. [#64362](https://github.com/woocommerce/woocommerce/pull/64362)
* Fix - Check parent product visibility in get_variation AJAX endpoint before returning variation data [#65209](https://github.com/woocommerce/woocommerce/pull/65209)
* Fix - Decode HTML entities in PTK pattern titles [#65969](https://github.com/woocommerce/woocommerce/pull/65969)
* Fix - Disable the "Continue" button on the product CSV import page until a file is selected or a server path is entered. [#66009](https://github.com/woocommerce/woocommerce/pull/66009)
* Fix - Fix 'current-menu-item' class not being added to the Shop page in the Page List block [#65996](https://github.com/woocommerce/woocommerce/pull/65996)
* Fix - Fix - Make WC_Blocks_Utils::has_block_in_page() search nested blocks recursively. [#63386](https://github.com/woocommerce/woocommerce/pull/63386)
* Fix - Fix/normalize the Store API cart/update-item route truncating decimal quantities when dispatching the cart item updated hook. [#66312](https://github.com/woocommerce/woocommerce/pull/66312)
* Fix - Fix: allow empty customer session fields to override prior values in WC_Customer_Data_Store_Session [#65633](https://github.com/woocommerce/woocommerce/pull/65633)
* Fix - Fix: ensure the dropdown inside Add to Cart + Options block render special character correctly. [#66530](https://github.com/woocommerce/woocommerce/pull/66530)
* Fix - Fix: Improve color contrast for delete link in .wc-metabox to meet WCAG 2.2 AA requirements (SC 1.4.3) [#65605](https://github.com/woocommerce/woocommerce/pull/65605)
* Fix - Fix: Sync active filters across multiple Product Filters blocks on the same page. [#65622](https://github.com/woocommerce/woocommerce/pull/65622)
* Fix - Fix a Sass build error in the Cart proceed-to-checkout block and remove an invalid script module declaration from the Product Price block. [#65749](https://github.com/woocommerce/woocommerce/pull/65749)
* Fix - Fix Checkout block shipping method UI after extension cart updates change the selected shipping rate. [#66014](https://github.com/woocommerce/woocommerce/pull/66014)
* Fix - Fix custom place order button (shortcode checkout) never submitting the order when a shipping address block is present. Client-side validation now only counts visible invalid fields, so the collapsed "Ship to a different address?" shipping fields no longer block submission. [#65933](https://github.com/woocommerce/woocommerce/pull/65933)
* Fix - Fix deferred product transient shutdown ordering before parent product sync. [#66470](https://github.com/woocommerce/woocommerce/pull/66470)
* Fix - Fix deleting a newly added custom field on the order edit screen with HPOS enabled. [#66132](https://github.com/woocommerce/woocommerce/pull/66132)
* Fix - Fix duplicate "Password Changed" admin notification email sent when a customer resets their password. [#66145](https://github.com/woocommerce/woocommerce/pull/66145)
* Fix - Fixed incorrect order counts when custom query_args are added via the order list table prepare_items query args filter. [#66207](https://github.com/woocommerce/woocommerce/pull/66207)
* Fix - Fixed quantity selector plus button size mismatch in Cart and Mini-Cart by replacing the fullwidth plus glyph with a standard plus. [#65658](https://github.com/woocommerce/woocommerce/pull/65658)
* Fix - Fix email previews for orders with downloadable products. [#65856](https://github.com/woocommerce/woocommerce/pull/65856)
* Fix - Fix encoded character in filter option label. [#66446](https://github.com/woocommerce/woocommerce/pull/66446)
* Fix - Fixes 0 value attributes from being skipped when variation is added to cart directly [#65725](https://github.com/woocommerce/woocommerce/pull/65725)
* Fix - Fixes checkout flow to not save shipping_method in customer meta [#65544](https://github.com/woocommerce/woocommerce/pull/65544)
* Fix - Fix exception message info leak to non-admin API callers, null dereferences on missing parent product and order, and duplicate date query key in OrdersTableQuery. [#65368](https://github.com/woocommerce/woocommerce/pull/65368)
* Fix - Fix express payment buttons missing a visible focus outline in Cart and Checkout. [#65901](https://github.com/woocommerce/woocommerce/pull/65901)
* Fix - Fix false "incompatible extension" notice shown in the block editor for express payment methods whose client-side `name` differs from their server-side gateway ID. The compatibility check now matches on `paymentMethodId` (falling back to `name`). [#66017](https://github.com/woocommerce/woocommerce/pull/66017)
* Fix - Fix fatal DB errors during upgrade on sites where HPOS was never enabled by adding a table existence check before attempting to restore the meta_key_value index on wp_wc_orders_meta. [#65536](https://github.com/woocommerce/woocommerce/pull/65536)
* Fix - Fix fatal error in Analytics Customers DataStore when a plain WC_Order (rather than the Overrides\Order subclass) is passed to get_or_create_customer_from_order(), and harden date_last_active against a missing date_created by cascading through date_modified and date_paid before falling back to null. [#64407](https://github.com/woocommerce/woocommerce/pull/64407)
* Fix - Fix fatal TypeError in ProductVersionStringInvalidator when a persistent object cache returns the cached variation parent ID as a string. [#65496](https://github.com/woocommerce/woocommerce/pull/65496)
* Fix - Fix fatal TypeError in wc_modify_map_meta_cap() on PHP 8+ when get_userdata() returns false for an invalid user ID. [#65506](https://github.com/woocommerce/woocommerce/pull/65506)
* Fix - Fix hierarchical selection and expansion in SearchListControl for multi-level categories [#66023](https://github.com/woocommerce/woocommerce/pull/66023)
* Fix - Fix horizontal page overflow caused by the Settings UI tab bar including its padding outside the declared width. [#65715](https://github.com/woocommerce/woocommerce/pull/65715)
* Fix - Fix insufficient color contrast on attribute placeholder text to meet WCAG 2.2 AA requirements. [#65608](https://github.com/woocommerce/woocommerce/pull/65608)
* Fix - Fix My Account endpoint page titles showing the page title instead of the endpoint heading (e.g. "Orders") in block themes when the cart is not empty. [#65949](https://github.com/woocommerce/woocommerce/pull/65949)
* Fix - Fix order totals only filling half the width on the admin order screen at mobile widths. [#65469](https://github.com/woocommerce/woocommerce/pull/65469)
* Fix - Fix oversized heading on the offline payment settings pages by setting the header font size explicitly instead of relying on the floating-header-scoped rule. [#66044](https://github.com/woocommerce/woocommerce/pull/66044)
* Fix - Fix PHP fatal in the Product Collection upsells handler when the product reference is unresolved (editor preview), and stop the cross-sells handler from leaking unresolved product references into its results. [#65909](https://github.com/woocommerce/woocommerce/pull/65909)
* Fix - Fix Product Collection block from marking the post as dirty when the editor loads. [#65524](https://github.com/woocommerce/woocommerce/pull/65524)
* Fix - Fix Product Collection inner blocks when rendered inside Query Loop post content. [#65637](https://github.com/woocommerce/woocommerce/pull/65637)
* Fix - Fix product description editor alignment in the classic product editor. [#66087](https://github.com/woocommerce/woocommerce/pull/66087)
* Fix - Fix Quantity Selector block styles when outside the Add to Cart + Options block [#66261](https://github.com/woocommerce/woocommerce/pull/66261)
* Fix - Fix refund amount validation message positioning [#66248](https://github.com/woocommerce/woocommerce/pull/66248)
* Fix - Fix silent backslash corruption in Agentic Checkout buyer/address fields and Store API checkout field validation. Calling wp_unslash() on JSON request body data that is never magic-quoted was stripping real backslashes typed by the buyer. [#65900](https://github.com/woocommerce/woocommerce/pull/65900)
* Fix - Fix silent backslash corruption in Store API (block checkout) address fields. Calling wp_unslash() on JSON body data that is never magic-quoted was stripping real backslashes from address_1, address_2, and other address fields. [#65643](https://github.com/woocommerce/woocommerce/pull/65643)
* Fix - Fix SKU duplication corrupting hyphenated SKUs. Duplicating a product with SKU `SKU-123` now correctly produces `SKU-123-1` instead of `SKU-124`. [#65423](https://github.com/woocommerce/woocommerce/pull/65423)
* Fix - Fix tax country code autocomplete to not be based on full country name [#65879](https://github.com/woocommerce/woocommerce/pull/65879)
* Fix - Fix tax state code autocomplete: allow searching by state code and scope suggestions to the selected country [#65882](https://github.com/woocommerce/woocommerce/pull/65882)
* Fix - Fix the daily log cleanup so it deletes all expired log files, not just the first 20. [#66073](https://github.com/woocommerce/woocommerce/pull/66073)
* Fix - Fix the log entry context being written and displayed as invalid JSON (e.g. with backtraces or namespaced class names) in WooCommerce > Status > Logs. [#65565](https://github.com/woocommerce/woocommerce/pull/65565)
* Fix - Fix the PSR-4 upgrade fallback fataling when a foreign Composer ClassLoader returns a non-array from getPrefixesPsr4() or a non-string from findFile(); validate both shapes so it degrades to no fallback instead. [#65674](https://github.com/woocommerce/woocommerce/pull/65674)
* Fix - Fix the WooPayments test account activation flow requiring a second click when switching to live payments. [#65895](https://github.com/woocommerce/woocommerce/pull/65895)
* Fix - Fix TypeError: string - string in get_formatted_order_total() on PHP 8.3 with refunded orders [#65507](https://github.com/woocommerce/woocommerce/pull/65507)
* Fix - Fix undefined behavior and potential infinite loop in WC_Post_Data::do_deferred_product_sync when more products are deferred for sync while a deferred sync is running. [#65664](https://github.com/woocommerce/woocommerce/pull/65664)
* Fix - For better compat, use order caps for HPOS placeholder posts. [#58432](https://github.com/woocommerce/woocommerce/pull/58432)
* Fix - Generate the POS catalog feed in chunks across several Action Scheduler actions so large catalogs no longer exceed the host request timeout or Action Scheduler's failure period mid-generation, and detect and restart stuck generation jobs that would otherwise stay pinned in progress forever. [#65860](https://github.com/woocommerce/woocommerce/pull/65860)
* Fix - Hardens Store API product/review endpoints checks. [#66065](https://github.com/woocommerce/woocommerce/pull/66065)
* Fix - Harden the in-place-upgrade PSR-4 fallback autoloader so its remaining unguarded paths degrade gracefully: a foreign Composer ClassLoader shape and a torn/partially-written class file mid-upgrade now leave the class unresolved instead of fataling, so a defensive class_exists() probe during an upgrade returns false rather than raising an error. [#65630](https://github.com/woocommerce/woocommerce/pull/65630)
* Fix - Harden types handling in WC_Tax class get-methods. [#65711](https://github.com/woocommerce/woocommerce/pull/65711)
* Fix - Hide Product Gallery arrows and thumbnails for products with one or no images in the editor. [#66108](https://github.com/woocommerce/woocommerce/pull/66108)
* Fix - Hide unnecessary WooPayments business structure selection during onboarding. [#66069](https://github.com/woocommerce/woocommerce/pull/66069)
* Fix - Improve cart table accessibility and spacing so screen readers announce line items as rows with the correct column headers. [#65689](https://github.com/woocommerce/woocommerce/pull/65689)
* Fix - Improve contrast for product IDs in the Products list row actions. [#65667](https://github.com/woocommerce/woocommerce/pull/65667)
* Fix - Improve text color contrast on the admin order edit screen so order data, line-item details, and column headers meet WCAG AA accessibility standards. [#65714](https://github.com/woocommerce/woocommerce/pull/65714)
* Fix - Invalidate the correct meta cache group when the HPOS order meta corruption guard fires, so a corrupt legacy object-cache entry is re-read from the database instead of persisting across reads. [#66554](https://github.com/woocommerce/woocommerce/pull/66554)
* Fix - Keep random Product Collection pagination consistent across pages. [#65462](https://github.com/woocommerce/woocommerce/pull/65462)
* Fix - Lock the POS catalog feed file exclusively while writing so two overlapping generation processes can no longer interleave output into a corrupt feed. [#65924](https://github.com/woocommerce/woocommerce/pull/65924)
* Fix - Log when the POS product feed directory's .htaccess cannot be updated, and avoid overwriting an unreadable or custom file during the legacy upgrade. [#65621](https://github.com/woocommerce/woocommerce/pull/65621)
* Fix - Mark grouped products add to cart table as presentational [#66096](https://github.com/woocommerce/woocommerce/pull/66096)
* Fix - Match orders and stock home panel border with other cards [#65864](https://github.com/woocommerce/woocommerce/pull/65864)
* Fix - Move logic to enable or disable the compatibility layer in block templates from 'template_redirect' to 'template_include' to be more accurate with the resolved template [#64504](https://github.com/woocommerce/woocommerce/pull/64504)
* Fix - Omit the LIMIT clause in OrdersTableQuery when an unlimited (-1) row count is requested, matching WP_Query nopaging behavior. Fixes a datatype mismatch error when the orders query runs against a SQLite database. [#64396](https://github.com/woocommerce/woocommerce/pull/64396)
* Fix - Order editing: skip reserved internal meta keys when saving order items, so they cannot be added via the "Add meta" button and stored as invisible meta. [#65471](https://github.com/woocommerce/woocommerce/pull/65471)
* Fix - Preserve Settings UI pending navigation after form-post saves. [#65910](https://github.com/woocommerce/woocommerce/pull/65910)
* Fix - Preserve the "Pending review" product status when exporting and re-importing products via CSV, instead of importing them as drafts. [#66194](https://github.com/woocommerce/woocommerce/pull/66194)
* Fix - Prevent a fatal error in the mini-cart and checkout review-order templates when a filter hooked on woocommerce_cart_item_product returns a truthy non-product value. [#65685](https://github.com/woocommerce/woocommerce/pull/65685)
* Fix - Prevent a fatal TypeError on the HPOS Orders screen when a persistent object cache returns a corrupt order or meta cache entry: invalid entries are now discarded and re-read from the database instead of breaking the page. [#66506](https://github.com/woocommerce/woocommerce/pull/66506)
* Fix - Prevent customer history metabox warnings for CPT-backed orders. [#65921](https://github.com/woocommerce/woocommerce/pull/65921)
* Fix - Prevent duplicate wc_product_start_scheduled_sale and wc_product_end_scheduled_sale actions from piling up in Action Scheduler when concurrent processes schedule sale events for the same product. [#65709](https://github.com/woocommerce/woocommerce/pull/65709)
* Fix - Prevent email previews from showing unrelated dummy products as downloadable items. [#65865](https://github.com/woocommerce/woocommerce/pull/65865)
* Fix - Prevent embedded WooPayments business verification from hanging when the Stripe loader fails. [#65863](https://github.com/woocommerce/woocommerce/pull/65863)
* Fix - Prevent fatal error on System Status page when log directory does not exist (e.g. when logging is disabled). [#65403](https://github.com/woocommerce/woocommerce/pull/65403)
* Fix - Prevent non-rate package metadata from invalidating cached shipping rates. [#65541](https://github.com/woocommerce/woocommerce/pull/65541)
* Fix - Prevent order items from being lost when order resume fails between removing items and saving the order. [#64326](https://github.com/woocommerce/woocommerce/pull/64326)
* Fix - Prevent PHP 8.5 deprecation notices when an order tax item has no matching tax rate. [#65706](https://github.com/woocommerce/woocommerce/pull/65706)
* Fix - Prevent Product Collection filter resets from clearing lifted collection controls. [#66022](https://github.com/woocommerce/woocommerce/pull/66022)
* Fix - Refresh product archive rewrite rules after the Shop page permalink changes. [#65967](https://github.com/woocommerce/woocommerce/pull/65967)
* Fix - Register a WooCommerce-scoped Composer PSR-4 fallback autoloader so that future in-place upgrades can resolve newly-added first-party Automattic\WooCommerce classes under src/ that the in-memory Jetpack classmap snapshot would otherwise miss, preventing "class not found" fatals during the upgrade request. [#65338](https://github.com/woocommerce/woocommerce/pull/65338)
* Fix - Reject attribute slugs whose taxonomy name (with the "pa_" prefix) exceeds WordPress's 32-byte limit, instead of incorrectly counting characters. This lets users create attributes with multibyte slugs (Cyrillic, Chinese, etc.) that fit within the limit, and shows a live byte count next to the slug input so users can see how close they are to the limit before submitting. [#64159](https://github.com/woocommerce/woocommerce/pull/64159)
* Fix - Reject refund IDs in Store API order authorization to prevent a fatal when wc_get_order() returns a WC_Order_Refund. [#64568](https://github.com/woocommerce/woocommerce/pull/64568)
* Fix - Remove additional WooCommerce data when uninstalling with WC_REMOVE_ALL_DATA: the product_visibility taxonomy terms, the placeholder image attachment, and additional WooCommerce user meta. The Action Scheduler tables can also be removed by additionally defining the WC_REMOVE_ACTION_SCHEDULER constant. [#65793](https://github.com/woocommerce/woocommerce/pull/65793)
* Fix - Remove the push notification preferences, shopper list, and customer email verification user meta when uninstalling with WC_REMOVE_ALL_DATA. [#66468](https://github.com/woocommerce/woocommerce/pull/66468)
* Fix - Remove unnecessary font-weight override on the mini-cart quantity badge and use a theme-resolvable color for the count text in the checkout order summary item badge. [#65647](https://github.com/woocommerce/woocommerce/pull/65647)
* Fix - Resolve downloadable file paths and Mini Cart lazy-loaded script URLs against the configured content directory and site URL instead of a hardcoded /wp-content location, so they work on non-default WordPress directory layouts (e.g. Bedrock or a custom WP_CONTENT_DIR). [#65599](https://github.com/woocommerce/woocommerce/pull/65599)
* Fix - Resolve the local pickup tax location from the order's own shipping line instead of attaching a per-call closure to woocommerce_order_get_tax_location during cart sync. [#65603](https://github.com/woocommerce/woocommerce/pull/65603)
* Fix - Respect the attribute's custom term order when creating all product variations. [#65501](https://github.com/woocommerce/woocommerce/pull/65501)
* Fix - Restore reduced stock when an order transitions to failed, so inventory held by an order that reduced stock while on-hold (e.g. an accepted-but-pending SEPA/ACH payment) is released instead of staying reduced indefinitely. [#66256](https://github.com/woocommerce/woocommerce/pull/66256)
* Fix - Sanitize instead of texturize the email address in the StoreAPI response [#66148](https://github.com/woocommerce/woocommerce/pull/66148)
* Fix - Scope the order attribution install banner button styles to the banner, so they no longer center the content of every icon+text components button rendered on WooCommerce admin pages. [#66206](https://github.com/woocommerce/woocommerce/pull/66206)
* Fix - Security hardening: pass allowed_classes => false to unserialize() in LookupDataStore to prevent PHP Object Injection via crafted cached data. [#65426](https://github.com/woocommerce/woocommerce/pull/65426)
* Fix - Send cancelled order admin emails when pending orders are cancelled. [#65855](https://github.com/woocommerce/woocommerce/pull/65855)
* Fix - Serialize mutations of the wc_pending_batch_processes option in BatchProcessingController with a short-lived database lock and a fresh re-read, so concurrent enqueue/dequeue/remove requests no longer clobber each other and silently drop or resurrect batch processors. [#66539](https://github.com/woocommerce/woocommerce/pull/66539)
* Fix - Stop re-sending customer order email notifications when restoring orders from the trash. [#65121](https://github.com/woocommerce/woocommerce/pull/65121)
* Fix - Store API: ensure the woocommerce_default_order_status filter is always removed after OrderController::create_order_from_cart(), even if order creation throws. [#65417](https://github.com/woocommerce/woocommerce/pull/65417)
* Fix - Store API: limit and de-duplicate the attribute and taxonomy count requests accepted by the products/collection-data endpoint to prevent a single request from triggering an excessive number of database queries. [#65420](https://github.com/woocommerce/woocommerce/pull/65420)
* Fix - Store API: validate address data on the checkout-order endpoint before it is persisted, so a rejected request can no longer modify an existing order's address or totals. [#65787](https://github.com/woocommerce/woocommerce/pull/65787)
* Fix - Structured data: emit a single Offer with the exact variation price (and `inProductGroupWithID`) when a variation-specific URL is requested, instead of the parent AggregateOffer price range, fixing Google Merchant "price mismatch" disapprovals. [#66043](https://github.com/woocommerce/woocommerce/pull/66043)
* Fix - Tolerate settings section registry failures when resolving the Settings UI request context, preventing update-time fatals. [#65975](https://github.com/woocommerce/woocommerce/pull/65975)
* Fix - Updates anchor rendering logic to not show an anchor tag when product image link is disabled [#65682](https://github.com/woocommerce/woocommerce/pull/65682)
* Fix - Updates the `product_shipping_class` taxonomy to be private. [#63146](https://github.com/woocommerce/woocommerce/pull/63146)
* Fix - Use a direct filesystem instance for log, import, product feed, and transient file operations inside the uploads directory, so they no longer fail on sites that have FS_METHOD set to an FTP-based method without complete credentials. [#64666](https://github.com/woocommerce/woocommerce/pull/64666)
* Fix - Use a fixed black overlay color for the drawer instead of inheriting the theme palette. [#65579](https://github.com/woocommerce/woocommerce/pull/65579)
* Fix - Use fixed colors for the coming soon footer banner instead of inheriting them from the active theme. [#65580](https://github.com/woocommerce/woocommerce/pull/65580)
* Fix - Use HTTPS for all geolocation IP-lookup and geo-IP requests. Switch the IP-lookup services (ipify, ipecho, ident, tnedi) to HTTPS and replace the HTTP-only ip-api.com geo-IP provider with the HTTPS-based country.is, so visitor IP addresses are never sent over unencrypted connections. [#66223](https://github.com/woocommerce/woocommerce/pull/66223)
* Fix - Use the checkout hold stock setting only for core checkout stock reservations. [#66048](https://github.com/woocommerce/woocommerce/pull/66048)
* Fix - v4 Orders API: align fee/shipping `can_be_refunded` with the refund validator — compare on a tax-inclusive absolute basis (so discount/negative fee lines report refundable) and round to currency precision (so a fully-refunded line is not reported refundable on a sub-cent float residue). [#65645](https://github.com/woocommerce/woocommerce/pull/65645)
* Fix - Variation bulk action "Set scheduled sale dates": block submission when the sale end date is earlier than the sale start date, and clear sale dates submitted as blank instead of storing 1970-01-01. [#66013](https://github.com/woocommerce/woocommerce/pull/66013)
* Fix - Warn when additional checkout fields are registered before the woocommerce_init action, which can load translations too early. [#66172](https://github.com/woocommerce/woocommerce/pull/66172)
* Fix - Warn when an order status key is too long and can't be stored. [#66164](https://github.com/woocommerce/woocommerce/pull/66164)
* Fix - Improve lost connection detection on WooCommerce admin screens [#66676](https://github.com/woocommerce/woocommerce/pull/66676)
* Fix - Restore 64px product thumbnails in the Mini Cart. [#66747](https://github.com/woocommerce/woocommerce/pull/66747)
* Fix - Canonicalize non-string option values in Settings UI schemas so select and radio fields show the saved selection. [#66933](https://github.com/woocommerce/woocommerce/pull/66933)
* Fix - Convert boolean Settings UI schema values the way the client does and canonicalize visibility values alongside their controller field. [#66955](https://github.com/woocommerce/woocommerce/pull/66955)
* Fix - Preserve settings navigation when Payments sections fall back from the Settings UI. [#66907](https://github.com/woocommerce/woocommerce/pull/66907)
* Fix - Prevent WordPress personal preferences from being exposed as customer metadata. [#66840](https://github.com/woocommerce/woocommerce/pull/66840)
* Fix - Show the Save button when an experimental Settings UI page falls back to the legacy renderer. [#66980](https://github.com/woocommerce/woocommerce/pull/66980)
* Fix - Stop the HPOS order meta corruption guard from treating extension-injected virtual meta rows (a meta_key and meta_value but no meta_id) as corrupt, which purged the meta cache and logged a warning on every read. [#66837](https://github.com/woocommerce/woocommerce/pull/66837)
* Fix - Fix a fatal error on the shortcode checkout when a phone, postcode, or state validated field is registered outside the billing and shipping fieldsets. [#67107](https://github.com/woocommerce/woocommerce/pull/67107)
* Fix - Temporary deactivate persistent product status counters and rollback to WordPress API usage. [#67094](https://github.com/woocommerce/woocommerce/pull/67094)
* Fix - Add no-op WC_REST_Layout_Templates_Controller and WC_REST_Products_Catalog_Controller stubs so an in-place update from 10.9.x does not fatal when the 10.9 controller list instantiates a class whose file has already been swapped away. [#67138](https://github.com/woocommerce/woocommerce/pull/67138)
* Fix - Revert the fixed end-prices order calculation changes from PR #63744, which caused tax-inclusive stores using the woocommerce_adjust_non_base_location_prices filter to charge the net amount on block/Store API checkout [#67161](https://github.com/woocommerce/woocommerce/pull/67161)
* Fix - Revert the legacy script blocking change (#64431) that broke the classic cart and checkout on sites loading a second jQuery instance. [#67363](https://github.com/woocommerce/woocommerce/pull/67363)
* Add - Add a "Send checkout recovery email" action to the order actions dropdown so merchants can manually send the Checkout Recovery email for pending or checkout-draft orders past the 1-hour abandonment threshold. [#65136](https://github.com/woocommerce/woocommerce/pull/65136)
* Add - Add a contextual Marketplace recommendation card to the WooCommerce Orders screen, shown to eligible stores based on locally-evaluated promotion rules. [#65970](https://github.com/woocommerce/woocommerce/pull/65970)
* Add - Add a native Settings UI page provider path for registered settings sections. [#65975](https://github.com/woocommerce/woocommerce/pull/65975)
* Add - Add a new transactional abandoned cart recovery email that prompts customers to complete a pending checkout, behind the new `abandoned_cart_recovery` feature flag. [#66393](https://github.com/woocommerce/woocommerce/pull/66393)
* Add - Add a recommendation card on the Abandoned cart recovery email settings page. [#65136](https://github.com/woocommerce/woocommerce/pull/65136)
* Add - Add a resend action to the temporary-password notice on My Account so customers can request a fresh change-password email. [#65821](https://github.com/woocommerce/woocommerce/pull/65821)
* Add - Add a setting to enable or disable backorder stock notification emails, plus a woocommerce_should_send_backorder_notification filter, mirroring the existing low stock and out of stock notifications. [#65891](https://github.com/woocommerce/woocommerce/pull/65891)
* Add - Add a user profile control so admins can view and set a customer's email-confirmation status. [#65824](https://github.com/woocommerce/woocommerce/pull/65824)
* Add - Add a woocommerce_format_phone_number filter and a WC_Validation::is_phone_format() method. [#66122](https://github.com/woocommerce/woocommerce/pull/66122)
* Add - Add CurrencyPosition enum class for woocommerce_currency_pos option values and adopt it in the Store API and Marketing Campaigns REST API. [#66128](https://github.com/woocommerce/woocommerce/pull/66128)
* Add - Add customer email verification, letting shoppers securely link past guest orders to their account once they confirm ownership of their email address. [#65822](https://github.com/woocommerce/woocommerce/pull/65822)
* Add - Add DimensionUnit enum class for woocommerce_dimension_unit option values and implement it across the codebase. [#66064](https://github.com/woocommerce/woocommerce/pull/66064)
* Add - Added Tax extensions recommendations. [#65786](https://github.com/woocommerce/woocommerce/pull/65786)
* Add - Add image_size query parameter to the products and product variations REST API endpoints, allowing consumers to request a specific registered WordPress image size. [#64009](https://github.com/woocommerce/woocommerce/pull/64009)
* Add - Add option disabling filter drawer on smaller screens. [#65671](https://github.com/woocommerce/woocommerce/pull/65671)
* Add - Add OrderUtil::custom_orders_table_data_sync_is_enabled() so extensions can cheaply check whether HPOS data sync is enabled without running the expensive is_custom_order_tables_in_sync() query. [#65649](https://github.com/woocommerce/woocommerce/pull/65649)
* Add - Add refund preview endpoint (POST /wc/v4/refunds/preview) for server-side refund calculation [#65335](https://github.com/woocommerce/woocommerce/pull/65335)
* Add - Add styling for settings UI shell header badges. [#65825](https://github.com/woocommerce/woocommerce/pull/65825)
* Add - Add TaxDisplayMode enum class for woocommerce_tax_display_shop/cart option values and implement it across the codebase. [#65812](https://github.com/woocommerce/woocommerce/pull/65812)
* Add - Add the foundation for POS staff management: an experimental `point_of_sale_staff` feature flag (off by default), a flag-gated orchestrator, and the `pos_*` capability access model that keys POS access on holding any `pos_*` WP capability. No runtime surface yet; the staff endpoint, attribution, and admin UI register behind the flag in follow-up changes. [#65657](https://github.com/woocommerce/woocommerce/pull/65657)
* Add - Add theme.json support to breadcrumbs block [#65460](https://github.com/woocommerce/woocommerce/pull/65460)
* Add - Add the POS preset layer to the capability model: capability bundles for the Cashier, Manager, and Admin presets, assigned or cleared per user via `woocommerce_pos_*` capabilities (never WP roles), with the assigned preset recorded in user meta and cleaned up on uninstall. Behind the off-by-default `point_of_sale_staff` feature flag. [#65661](https://github.com/woocommerce/woocommerce/pull/65661)
* Add - Add the `woocommerce_variable_product_taxes_influence_price` filter. [#65394](https://github.com/woocommerce/woocommerce/pull/65394)
* Add - Add Webflow platform to the CLI products migrator. [#64866](https://github.com/woocommerce/woocommerce/pull/64866)
* Add - Add WeightUnit enum class for woocommerce_weight_unit option values and implement it across the codebase. [#64422](https://github.com/woocommerce/woocommerce/pull/64422)
* Add - Add woocommerce_term_recount_product_count filter to _wc_term_recount. [#64374](https://github.com/woocommerce/woocommerce/pull/64374)
* Add - Add woocommerce_validate_phone filter to allow customizing phone number validation [#65817](https://github.com/woocommerce/woocommerce/pull/65817)
* Add - Allow POS catalog product feed files to be served by enabling file access on the feed directory while preventing directory listing. [#65563](https://github.com/woocommerce/woocommerce/pull/65563)
* Add - Analytics: list failed order imports in the Import historical data section with a retry action. [#65509](https://github.com/woocommerce/woocommerce/pull/65509)
* Add - Customers can now unsubscribe from Checkout Recovery emails via a one-click link in the email footer. [#65136](https://github.com/woocommerce/woocommerce/pull/65136)
* Add - Inject default sibling-section navigation into native Settings UI page schemas that omit shell.sectionNavigation. [#65975](https://github.com/woocommerce/woocommerce/pull/65975)
* Add - Make per-line `refund_total` optional on POST /wc/v4/refunds. When omitted, the backend computes the tax-inclusive refund total from the order line item's unit price × quantity. The legacy explicit form (refund_total without quantity) is preserved for v3-style callers. [#65439](https://github.com/woocommerce/woocommerce/pull/65439)
* Add - POST /wc/v4/refunds/preview: accept refund_total per line item for partial-amount previews (quantity now optional when refund_total is provided). For the quantity and tax-inclusive refund_total forms, preview and create split tax by the line's stored total/tax ratio and round amounts identically, so a previewed amount matches the created refund to the cent. [#65645](https://github.com/woocommerce/woocommerce/pull/65645)
* Add - Register a GDPR privacy exporter and eraser for shopper lists so admin Export/Erase Personal Data tools cover saved-for-later and wishlist data. [#65251](https://github.com/woocommerce/woocommerce/pull/65251)
* Add - Schedule the abandoned cart recovery email to send 2 hours after a pending order is created, and cancel the pending send when the order leaves the pending status. [#66393](https://github.com/woocommerce/woocommerce/pull/66393)
* Update - Customer email verification now confirms via a one-time login-gated link instead of a 6-digit code. [#65971](https://github.com/woocommerce/woocommerce/pull/65971)
* Update - Deprecate the Point of Sale feature flag and remove its toggle from WooCommerce settings; POS-related functionality (settings page, product visibility, and transactional emails) is now always enabled. The flag setting remains readable via the REST API for mobile app compatibility. [#65573](https://github.com/woocommerce/woocommerce/pull/65573)
* Update - Load the WordPress Design System tokens stylesheet on WooCommerce settings pages so Settings UI styles consume real design tokens. [#66542](https://github.com/woocommerce/woocommerce/pull/66542)
* Update - Move several WooCommerce admin status notices to Site Health and show regeneration progress in status tools; deprecate the related WC_Admin_Notices/WC_Regenerate_Images notice callbacks and stop honoring the woocommerce_hide_* notice dismissal filters [#64758](https://github.com/woocommerce/woocommerce/pull/64758)
* Update - Remove @woocommerce/create-product-editor-block package [#65435](https://github.com/woocommerce/woocommerce/pull/65435)
* Update - Remove the deprecated product block editor feature, package, routes, assets, and extension APIs. [#65500](https://github.com/woocommerce/woocommerce/pull/65500)
* Update - Render settings UI section cards with WordPress Design System components behind the settings-ui feature flag. [#66456](https://github.com/woocommerce/woocommerce/pull/66456)
* Update - Replace PanelBody with ToolsPanel in All Reviews, Reviews by Category, and Reviews by Product inspector controls. [#65799](https://github.com/woocommerce/woocommerce/pull/65799)
* Update - Replace PanelBody with ToolsPanel in Stock Filter inspector controls. [#65625](https://github.com/woocommerce/woocommerce/pull/65625)
* Update - Replace PanelBody with ToolsPanel in the PageSelector component. [#64935](https://github.com/woocommerce/woocommerce/pull/64935)
* Update - Update Algeria states from 48 to 58 wilayas; also correct DZ-11 spelling. [#65385](https://github.com/woocommerce/woocommerce/pull/65385)
* Update - Update Product Filter Status block labels to use availability wording. [#65803](https://github.com/woocommerce/woocommerce/pull/65803)
* Update - Update product publish panel catalog visibility layout and extension row ordering. [#66080](https://github.com/woocommerce/woocommerce/pull/66080)
* Update - Update the Action Scheduler package to version 4.0.0. [#65790](https://github.com/woocommerce/woocommerce/pull/65790)
* Update - Update the WordPress package catalog to WordPress 6.9 package versions. [#65481](https://github.com/woocommerce/woocommerce/pull/65481)
* Update - Use the standard WordPress UI Notice for payment method eligibility notices in WooPayments onboarding. [#66016](https://github.com/woocommerce/woocommerce/pull/66016)
* Update - Settings UI: hide the shell header for pages registered at the top level of settings, which keep the classic section links and a save button at the bottom of the page. Payments drill-down pages show the header with breadcrumbs in place of the top-level settings tabs. [#66662](https://github.com/woocommerce/woocommerce/pull/66662)
* Dev - Add delivery-agnostic ProductShapeMapperInterface to the ProductFeed framework, deprecating ProductMapperInterface in its favor. [#65720](https://github.com/woocommerce/woocommerce/pull/65720)
* Dev - Add internal helper methods on Refunds\DataUtils to support the upcoming refund preview endpoint. [#65334](https://github.com/woocommerce/woocommerce/pull/65334)
* Dev - Add to Cart + Options: add extra e2e tests to cover skipped unit tests [#66118](https://github.com/woocommerce/woocommerce/pull/66118)
* Dev - Audit Action Scheduler APIs usage. [#65831](https://github.com/woocommerce/woocommerce/pull/65831)
* Dev - Bump grunt-contrib-cssmin to 4.x (clean-css 5) so the admin CSS pipeline preserves @container at-rules. [#65842](https://github.com/woocommerce/woocommerce/pull/65842)
* Dev - Deprecate the Automattic\WooCommerce\Blocks\QueryFilters class. [#65598](https://github.com/woocommerce/woocommerce/pull/65598)
* Dev - Fix product-reviews "can delete a product review" E2E flake by waiting for the trash AJAX to commit before navigating to the Trash view. [#65911](https://github.com/woocommerce/woocommerce/pull/65911)
* Dev - Fix the Blocks e2e nightly suite: mount the released plugin at the canonical `woocommerce` folder via a wp-env mapping, instead of letting wp-env name the plugin folder after the release zip (e.g. `woocommerce-trunk-nightly`), which broke the test setup's plugin-path assumptions. The generated test translations are mapped into the plugin's languages directory the same way. Also resolve the active plugin path (WC_ABSPATH) for the sample product import. [#65798](https://github.com/woocommerce/woocommerce/pull/65798)
* Dev - Force immediate analytics import mode in the analytics-data E2E spec so its orders import deterministically regardless of the store's scheduled-import default; test-only, no changes to shipped code. [#66097](https://github.com/woocommerce/woocommerce/pull/66097)
* Dev - Harden Blocks non-null assertion lint rule to error. [#66010](https://github.com/woocommerce/woocommerce/pull/66010)
* Dev - Migrate Blocks e2e leaf utils (constants, test, types, wp-cli, get-test-translation, request-utils, navigation) and content-templates into the Core e2e suite under a blocks/ namespace; test-only, no changes to shipped code. [#65628](https://github.com/woocommerce/woocommerce/pull/65628)
* Dev - Migrate Blocks e2e non-module assets (themes, test plugins, test data, lint rules) into the Core e2e suite under a blocks/ namespace; test-only, no changes to shipped code. [#65442](https://github.com/woocommerce/woocommerce/pull/65442)
* Dev - Migrate Blocks e2e page-object utils (admin, editor, frontend, local-pickup, mini-cart, performance, shipping) into the Core e2e suite under utils/blocks/; test-only, no changes to shipped code. [#65571](https://github.com/woocommerce/woocommerce/pull/65571)
* Dev - Migrate Blocks e2e specs into the Core e2e suite under tests/blocks and add a core testIgnore guard so the core e2e project does not collect them; the Blocks suite keeps running them from the new location. Test-only, no changes to shipped code. [#65670](https://github.com/woocommerce/woocommerce/pull/65670)
* Dev - Migrate offline payment settings forms to DataForm. [#65731](https://github.com/woocommerce/woocommerce/pull/65731)
* Dev - Mount E2E helper plugins as a directory and provision wp-cli.yml in-container so single-file Docker mounts no longer surface as empty files under gRPC FUSE. [#65807](https://github.com/woocommerce/woocommerce/pull/65807)
* Dev - Prepare Marketplace JSX and ref types for React 19 compatibility. [#65401](https://github.com/woocommerce/woocommerce/pull/65401)
* Dev - Remove @woocommerce/integrate-plugin package [#65434](https://github.com/woocommerce/woocommerce/pull/65434)
* Dev - Remove benign errors from the Blocks e2e build log: make provisioning idempotent (customer user and Test Helper APIs plugin) across the Core and Blocks setup paths, drop a redundant `--fields=id` from the product attribute listing, and navigate the page away before the per-test DB reset so late Store API requests stop logging false "not a valid JSON response" errors. [#65861](https://github.com/woocommerce/woocommerce/pull/65861)
* Dev - Remove deprecated Blocks bootstrap dependencies. [#65653](https://github.com/woocommerce/woocommerce/pull/65653)
* Dev - Remove redundant basic E2E smoke test; its checks are implicitly covered by other specs. [#65810](https://github.com/woocommerce/woocommerce/pull/65810)
* Dev - Remove the unused block templates admin package and PHP API. [#65503](https://github.com/woocommerce/woocommerce/pull/65503)
* Dev - Remove the unused coming soon newsletter template feature flag. [#65461](https://github.com/woocommerce/woocommerce/pull/65461)
* Dev - Rename the e2e test directory from e2e-pw to e2e and repoint all references; test-only, no changes to shipped code. [#65844](https://github.com/woocommerce/woocommerce/pull/65844)
* Dev - Set the product's comment_status via WP-CLI in the product-rating E2E specs instead of clicking product-data tabs that race against admin JS initialization; test-only, no changes to shipped code. [#66097](https://github.com/woocommerce/woocommerce/pull/66097)
* Dev - Stabilize Blocks E2E site editor saves when the save panel opens with multiple dirty entities. [#65619](https://github.com/woocommerce/woocommerce/pull/65619)
* Dev - Stabilize the non-UTC refund sales report unit test so it no longer fails depending on the time of day CI runs; test-only, no changes to shipped code. [#66113](https://github.com/woocommerce/woocommerce/pull/66113)
* Dev - Stabilize two e2e specs in the core-parallel pool against concurrent-worker pollution: customer-list (pin the customers report page size on the URL so the list assertions and CSV download stay deterministic regardless of how many customers other workers create) and create-order (wait for the line item to render before saving so the order is never persisted with a 0-quantity line). [#66093](https://github.com/woocommerce/woocommerce/pull/66093)
* Dev - tests: move coupons test coverage from e2e to php unit [#65592](https://github.com/woocommerce/woocommerce/pull/65592)
* Dev - Use idempotent checkout address helpers in checkout e2e tests. [#65548](https://github.com/woocommerce/woocommerce/pull/65548)
* Dev - Use the public postcode-validator API instead of reaching into the package's internal CJS regex map. [#65382](https://github.com/woocommerce/woocommerce/pull/65382)
* Dev - Warn when deprecated AssetDataRegistry key check arguments are explicitly provided. [#66036](https://github.com/woocommerce/woocommerce/pull/66036)
* Dev - De-flake blocks e2e tests. [#66584](https://github.com/woocommerce/woocommerce/pull/66584)
* Dev - Fix email editor E2E tests on WordPress 7.1: update the preview "open in new tab" tracking selector to the new menu item and use a single-line block edit so the Save button enables. [#67061](https://github.com/woocommerce/woocommerce/pull/67061)
* Tweak - Add aria-label to payment methods list for improved screen reader accessibility [#65201](https://github.com/woocommerce/woocommerce/pull/65201)
* Tweak - Add proper ARIA roles and scope attributes to cart table headers for screen reader accessibility (WCAG 1.3.1) [#65364](https://github.com/woocommerce/woocommerce/pull/65364)
* Tweak - Align the Data status box with the Date range filter at mid-range viewports, drop the trailing colons on both labels, use a consistent "M j at H:i" date format, and pick up WP component defaults for the Update now button and bar typography. [#64846](https://github.com/woocommerce/woocommerce/pull/64846)
* Tweak - Align the Order Edit meta boxes with WordPress 7.0 admin design and preserve the legacy order trash action surface with sentence-case copy. [#64564](https://github.com/woocommerce/woocommerce/pull/64564)
* Tweak - Always show the email Reply-to settings, regardless of whether the email block editor feature is enabled. [#65122](https://github.com/woocommerce/woocommerce/pull/65122)
* Tweak - Enable the product object caching feature by default for newly installed stores. Existing stores are unaffected and keep the opt-in default. [#65445](https://github.com/woocommerce/woocommerce/pull/65445)
* Tweak - Improve the label and description of the WooCommerce Analytics setting on the Features settings screen. [#65887](https://github.com/woocommerce/woocommerce/pull/65887)
* Tweak - Make the Abandoned cart recovery feature experimental and opt-in only; it is no longer enabled automatically on new installs. [#65521](https://github.com/woocommerce/woocommerce/pull/65521)
* Tweak - Minor enhancements to product swatches and editing Color attributes in the editor [#65693](https://github.com/woocommerce/woocommerce/pull/65693)
* Tweak - Move the "Display site visibility badge in admin bar" toggle into the Site Visibility settings tab and align the toggle with its label. [#65708](https://github.com/woocommerce/woocommerce/pull/65708)
* Tweak - Reduce the visual weight of legacy admin empty states to align with WordPress admin styling. [#64645](https://github.com/woocommerce/woocommerce/pull/64645)
* Tweak - Remove "and in reviews" from the display name description in My Account if product reviews are not active [#66233](https://github.com/woocommerce/woocommerce/pull/66233)
* Tweak - Remove the disabled use-wp-horizon feature flag. [#65491](https://github.com/woocommerce/woocommerce/pull/65491)
* Tweak - Remove the trailing colon from FilterPicker labels to match WordPress 7.0 form-field labeling. [#66482](https://github.com/woocommerce/woocommerce/pull/66482)
* Tweak - Rename Products (Beta) block to Products (Deprecated) [#65523](https://github.com/woocommerce/woocommerce/pull/65523)
* Tweak - Rename visual-attribute-color-picker script to visual-attribute-picker [#65494](https://github.com/woocommerce/woocommerce/pull/65494)
* Tweak - Restore a generic blank-state icon style so extension-supplied icon glyphs render at the refreshed 32px scale. [#66527](https://github.com/woocommerce/woocommerce/pull/66527)
* Tweak - Show WooCommerce Status and Recent Reviews dashboard widgets during store setup. [#65704](https://github.com/woocommerce/woocommerce/pull/65704)
* Tweak - Standardize copy for Product Filters descriptions. [#65925](https://github.com/woocommerce/woocommerce/pull/65925)
* Tweak - Update the Settings UI section card border radius to match DataForm styling. [#66042](https://github.com/woocommerce/woocommerce/pull/66042)
* Tweak - Abandoned cart recovery: remove a redundant order lookup on every order status transition. [#67017](https://github.com/woocommerce/woocommerce/pull/67017)
* Performance - Audit wc_product_dropdown_categories usages in admin [#66202](https://github.com/woocommerce/woocommerce/pull/66202)
* Performance - Batch-prime product image attachment caches across the products collection endpoints (Store API, REST v3, v4) and reuse the shared helper in the Store API cart. [#65436](https://github.com/woocommerce/woocommerce/pull/65436)
* Performance - Centralize wp_count_posts invocations towards products. [#65894](https://github.com/woocommerce/woocommerce/pull/65894)
* Performance - Coalesce repeated product transient deletion during REST variation batch writes. [#65591](https://github.com/woocommerce/woocommerce/pull/65591)
* Performance - Disabled counters in the category filter on the admin products page to address performance issues with large product catalogs. [#66176](https://github.com/woocommerce/woocommerce/pull/66176)
* Performance - Harden the conditions required to invoke \Automattic\WooCommerce\Internal\Utilities\ProductUtil::get_counts_for_type throughout the codebase. [#65885](https://github.com/woocommerce/woocommerce/pull/65885)
* Performance - HPOS: speed up the order admin list on large stores by rewriting multi-status order queries as per-status UNIONs. [#65663](https://github.com/woocommerce/woocommerce/pull/65663)
* Performance - Improve the performance of the analytics Products and Variations reports by batch-priming product caches. [#65468](https://github.com/woocommerce/woocommerce/pull/65468)
* Performance - Limit layered navigation count cache growth for product attributes and brands. [#65552](https://github.com/woocommerce/woocommerce/pull/65552)
* Performance - Optimized JetPack connection status retrieval on admin pages. [#65505](https://github.com/woocommerce/woocommerce/pull/65505)
* Performance - Optimized SQL generation in \Automattic\WooCommerce\Internal\DataStores\Orders\OrdersTableQuery by removing 'group by' and 'limit' clauses when they are not required. [#65413](https://github.com/woocommerce/woocommerce/pull/65413)
* Performance - Optimized the stock reservation SQL to prevent blocking order status updates. [#65325](https://github.com/woocommerce/woocommerce/pull/65325)
* Performance - Product Collection: Reduce editor bundle cost [#66150](https://github.com/woocommerce/woocommerce/pull/66150)
* Performance - Reduced the number of SQL queries on the cart and checkout pages in the store, as well as on admin pages, by adding cache priming. [#65883](https://github.com/woocommerce/woocommerce/pull/65883)
* Performance - Reduced the number of SQL queries required to fetch tax rates in the cart and during checkout. [#65558](https://github.com/woocommerce/woocommerce/pull/65558)
* Performance - Store API: skip initializing the available payment gateways on checkout requests that do not provide a payment method. [#65931](https://github.com/woocommerce/woocommerce/pull/65931)
* Performance - Update the admin to use persistent product status counters to improve performance with large product catalogs. [#65957](https://github.com/woocommerce/woocommerce/pull/65957)
* Performance - Push notifications: Improve performance of get_tokens_for_roles(): the role lookup is now restricted to users that actually own push tokens. [#66857](https://github.com/woocommerce/woocommerce/pull/66857)
* Enhancement - Add a filter to hide shipping details in email previews. [#65857](https://github.com/woocommerce/woocommerce/pull/65857)
* Enhancement - Add unique CSS classes to the order data meta-box columns: order_data_column_general, order_data_column_billing, and order_data_column_shipping. [#65859](https://github.com/woocommerce/woocommerce/pull/65859)
* Enhancement - Updated Product Image block to use larger thumbnails [#66191](https://github.com/woocommerce/woocommerce/pull/66191)
* Enhancement - `woocommerce_add_to_cart_quantity` filter now receives `$variation_id`. [#63679](https://github.com/woocommerce/woocommerce/pull/63679)


[See changelog for all versions](https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/changelog.txt).