=== 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: 7.0
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 11.1.1
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://developer.woocommerce.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 7.0 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.2.0-beta.1 2026-09-21 =

**WooCommerce**

* Fix - Accept Danish postcodes that carry the DK prefix with no separator or with a space, matching the separator handling introduced for Latvian postcodes. [#67685](https://github.com/woocommerce/woocommerce/pull/67685)
* Fix - Accept Latvian postcodes that carry the LV prefix without a hyphen, restoring values that validated before postcode rules were added for Latvia. [#67684](https://github.com/woocommerce/woocommerce/pull/67684)
* Fix - Add postcode validation for Latvia, which previously accepted invalid values. [#67460](https://github.com/woocommerce/woocommerce/pull/67460)
* Fix - Add translator context to the Orders list table "Status" column so it can be translated independently of the unrelated "Status" strings elsewhere in the admin. [#67816](https://github.com/woocommerce/woocommerce/pull/67816)
* Fix - Allow password reset links to work when reset cookies use SameSite=Strict. [#68334](https://github.com/woocommerce/woocommerce/pull/68334)
* Fix - Allow structured data filters to return multiple schema types without causing a fatal error or dropping valid product markup. [#68459](https://github.com/woocommerce/woocommerce/pull/68459)
* Fix - Allow variation attribute selectors to use available header space and wrap on narrow screens. [#68434](https://github.com/woocommerce/woocommerce/pull/68434)
* Fix - Analytics: label a customer filter tag with the username or email when the customer is registered without a name. Affects the Downloads and Customers reports. [#68139](https://github.com/woocommerce/woocommerce/pull/68139)
* Fix - Analytics: pin the Stock report to published and private products so its CSV export always completes and its download email is sent. [#68045](https://github.com/woocommerce/woocommerce/pull/68045)
* Fix - Analytics: report the Taxes report period by the configured date type (default date paid) so its order counts and tax totals reconcile with the Orders and Revenue reports. [#67553](https://github.com/woocommerce/woocommerce/pull/67553)
* Fix - Analytics: restore the released unqualified parent_id form of the Taxes orders_count column carried by the woocommerce_admin_report_columns filter, and invalidate report caches on the first-ever save of the analytics date type. [#67679](https://github.com/woocommerce/woocommerce/pull/67679)
* Fix - Analytics > Orders: report refunds with the customer type of the order they refund, instead of always reporting them as returning customers. [#67565](https://github.com/woocommerce/woocommerce/pull/67565)
* Fix - Anchor day-precision date queries on the store's local midnight instead of UTC midnight, so wc_get_orders() and wc_get_products() match the day a merchant means when filtering on date_paid, date_completed, date_on_sale_from and date_on_sale_to. A `start...end` range now covers the whole of its final day, where before it collapsed that day down to a single second, so range queries return one more day of results than they used to. [#67903](https://github.com/woocommerce/woocommerce/pull/67903)
* Fix - Avoid customized WooCommerce template parts taking priority over template parts queried directly [#67892](https://github.com/woocommerce/woocommerce/pull/67892)
* Fix - Back in Stock: hide the sign-up form with the hidden attribute so it stays hidden for in-stock variations on themes that replace the WooCommerce stylesheet. [#68859](https://github.com/woocommerce/woocommerce/pull/68859)
* Fix - Cast the payment method title to string on printed order receipts so a non-string value from the woocommerce_printable_order_receipt_data filter no longer fatals receipt generation. [#67763](https://github.com/woocommerce/woocommerce/pull/67763)
* Fix - Clarify that variation price filters use string values. [#67796](https://github.com/woocommerce/woocommerce/pull/67796)
* Fix - Clear product CSV import mapping markers in the last import batch, so an import abandoned during cleanup cannot make a later import resolve its id: references to the wrong products. [#68392](https://github.com/woocommerce/woocommerce/pull/68392)
* Fix - Constrain the product image on the stock notification edit screen so it no longer overflows its column and overlaps the Update button. [#64482](https://github.com/woocommerce/woocommerce/pull/64482)
* Fix - Corrected the `@since` tag for WC_Coupon::set_status() from 3.0.0 to 6.2.0 [#37557](https://github.com/woocommerce/woocommerce/pull/37557)
* Fix - Correctly hide patterns containing product-related blocks when products are password-protected [#68479](https://github.com/woocommerce/woocommerce/pull/68479)
* Fix - Correctly highlight Products submenu items throughout the empty All Products add-product flow. [#67655](https://github.com/woocommerce/woocommerce/pull/67655)
* Fix - Correct the public TypeScript type for the Store API item_data `hidden` flag, which arrives as a string rather than a boolean. [#68159](https://github.com/woocommerce/woocommerce/pull/68159)
* Fix - Delete orphaned order notes (comments) when an order is permanently deleted with HPOS enabled and sync disabled. [#67935](https://github.com/woocommerce/woocommerce/pull/67935)
* Fix - Direction-isolate the currency symbol in wc_price() so RTL-script symbols (e.g. Lebanese Pound) respect the configured currency position and no longer bleed into surrounding text. [#67686](https://github.com/woocommerce/woocommerce/pull/67686)
* Fix - Dispatch plugin install/activate failures as error notices instead of success notices when the rejected PluginError is passed to createNoticesFromResponse(). [#68095](https://github.com/woocommerce/woocommerce/pull/68095)
* Fix - Display the real character instead of the raw HTML entity when the price thousand or decimal separator is stored as an entity such as &nbsp; in Analytics, admin screens, and blocks. [#67732](https://github.com/woocommerce/woocommerce/pull/67732)
* Fix - Enable Back in Stock Notifications sign-ups by default on new installs, as intended, instead of leaving the sign-up form off because the install hook wrote the wrong option name. [#68737](https://github.com/woocommerce/woocommerce/pull/68737)
* Fix - Encode apostrophes in classic checkout request data. [#68365](https://github.com/woocommerce/woocommerce/pull/68365)
* Fix - Ensure exact global attribute terms remain selectable when partial matches fill the search results. [#68098](https://github.com/woocommerce/woocommerce/pull/68098)
* Fix - Ensure low-stock thresholds are stored as non-negative integers. [#67925](https://github.com/woocommerce/woocommerce/pull/67925)
* Fix - Ensure POS catalog download URLs reflect the current site URL. [#67815](https://github.com/woocommerce/woocommerce/pull/67815)
* Fix - Ensure Product Filters respect zero block spacing on the frontend. [#67870](https://github.com/woocommerce/woocommerce/pull/67870)
* Fix - Ensure Store API checkout carts clear after redirect payments. [#68102](https://github.com/woocommerce/woocommerce/pull/68102)
* Fix - Ensure the cached order item data always includes the item type and item ID, so the cache shape is consistent between the order data store and the order item data store. [#67513](https://github.com/woocommerce/woocommerce/pull/67513)
* Fix - Ensure WooCommerce scheduled actions are removed on uninstall by bootstrapping Action Scheduler when no other plugin has loaded it. [#68527](https://github.com/woocommerce/woocommerce/pull/68527)
* Fix - Escape product titles in the dashboard top-seller report and correct output annotations. [#68160](https://github.com/woocommerce/woocommerce/pull/68160)
* Fix - Escape settings field attributes and currency symbols in legacy report scripts. [#68209](https://github.com/woocommerce/woocommerce/pull/68209)
* Fix - Exclude password-protected product reviews from the Store API [#68375](https://github.com/woocommerce/woocommerce/pull/68375)
* Fix - Exclude payment settings from Blueprint exports and clarify this in the export interface. [#67941](https://github.com/woocommerce/woocommerce/pull/67941)
* Fix - Exclude refunds of never-paid or never-completed orders from Revenue analytics filtered by paid or completed date, so manually refunded failed orders no longer produce phantom returns, negative net sales and uncollected tax amounts. Applies to refunds synced after this fix; previously imported rows update on re-sync or historical data re-import. [#67710](https://github.com/woocommerce/woocommerce/pull/67710)
* Fix - Expose the Customer Stock Notifications settings through the REST settings API by registering them outside the admin context. [#68464](https://github.com/woocommerce/woocommerce/pull/68464)
* Fix - Fade the whole button rather than only its label when a cart or checkout button is disabled, and stop disabled outlined buttons from taking on the dark hover styling. [#67738](https://github.com/woocommerce/woocommerce/pull/67738)
* Fix - Fix a fatal error generating receipts for orders with a deleted variation parent. [#68369](https://github.com/woocommerce/woocommerce/pull/68369)
* Fix - Fix a fatal error on the order received page when the order key is passed as an array, and replace legacy WPCS suppression comments in the settings save handler, thanks page, conditional tag helpers and terms template with exact PHPCS annotations. [#68266](https://github.com/woocommerce/woocommerce/pull/68266)
* Fix - Fix a fatal error when structured data is requested without a type filter on a store whose markup uses multiple schema types. [#68740](https://github.com/woocommerce/woocommerce/pull/68740)
* Fix - Fix a long order origin overflowing the Order attribution metabox. The origin now takes the full width of the metabox and is truncated to one line while the details are collapsed, and the details toggle has moved to the bottom of the metabox. [#67877](https://github.com/woocommerce/woocommerce/pull/67877)
* Fix - Fix Analytics Revenue table rows keeping the first dataset loaded when an extension report filter changes. [#68052](https://github.com/woocommerce/woocommerce/pull/68052)
* Fix - Fix Analytics settings so a failed save can be retried and no longer reports an error after it succeeds. [#67868](https://github.com/woocommerce/woocommerce/pull/67868)
* Fix - Fix a shopper being blocked in the checkout shortcode by a stock hold created by their own cancelled order. [#67471](https://github.com/woocommerce/woocommerce/pull/67471)
* Fix - Fix Back in Stock duplicate signup detection: match guest and logged-in signups with the same email, ignore cancelled and sent notifications, and keep signups for different variation attributes separate. [#68728](https://github.com/woocommerce/woocommerce/pull/68728)
* Fix - Fix cache invalidation no-ops when transient versions refresh within the same second. [#64604](https://github.com/woocommerce/woocommerce/pull/64604)
* Fix - Fix Catalog sorting label vertical alignment [#68024](https://github.com/woocommerce/woocommerce/pull/68024)
* Fix - Fix conditional checkout fields when dependency values are missing, contain punctuation, or come from a saved order during payment retries. [#68220](https://github.com/woocommerce/woocommerce/pull/68220)
* Fix - Fix coupons applied in the order editor ignoring manually edited line item totals. [#67979](https://github.com/woocommerce/woocommerce/pull/67979)
* Fix - Fix Customers report aggregates and numeric filters for refunds and parented orders. [#67713](https://github.com/woocommerce/woocommerce/pull/67713)
* Fix - Fix date filtering of the HPOS orders list via links from Analytics reports (order_date_type and day-granularity date params were ignored). [#67625](https://github.com/woocommerce/woocommerce/pull/67625)
* Fix - Fix default product category row losing Name column and actions on WordPress 7.1. [#68418](https://github.com/woocommerce/woocommerce/pull/68418)
* Fix - Fix product archive pagination links to the first page. [#68116](https://github.com/woocommerce/woocommerce/pull/68116)
* Fix - Fix product CSV importer failing between steps when the file path contains special characters such as '+', and show a clear error when the CSV file cannot be opened. [#66986](https://github.com/woocommerce/woocommerce/pull/66986)
* Fix - Fix Product Filters on a Shop page set as the static front page. [#67791](https://github.com/woocommerce/woocommerce/pull/67791)
* Fix - Fix product list filters and sorting breaking when an extension joins the wc_product_meta_lookup table under its own alias. [#68094](https://github.com/woocommerce/woocommerce/pull/68094)
* Fix - Fix product permalink settings radio buttons reverting to "Custom base" after saving Default, Shop base, or Shop base with category. [#67346](https://github.com/woocommerce/woocommerce/pull/67346)
* Fix - Fix reversed pagination arrows on Analytics report tables in RTL locales [#67724](https://github.com/woocommerce/woocommerce/pull/67724)
* Fix - Fix RTL currency symbols not respecting the currency position setting in the Checkout blocks [#68744](https://github.com/woocommerce/woocommerce/pull/68744)
* Fix - Fix settings groups being registered twice, and settings pages or email classes registered from admin_init callbacks being dropped. [#67718](https://github.com/woocommerce/woocommerce/pull/67718)
* Fix - Fix the "log in" link in the stock notifications account-required notice pointing to /my-account/my-account/ instead of the My Account page. [#68782](https://github.com/woocommerce/woocommerce/pull/68782)
* Fix - Fix the Analytics date range label showing a garbled date in languages whose month names contain digits, such as Japanese. [#67804](https://github.com/woocommerce/woocommerce/pull/67804)
* Fix - Fix the back-in-stock notification email CTA dropping the selected "Any" attribute from the product link. [#68355](https://github.com/woocommerce/woocommerce/pull/68355)
* Fix - Fix the block email editor loading in a broken state when a plugin (e.g. Yoast SEO Premium) calls WP_Screen::get() from admin_enqueue_scripts, re-entering the replace_editor filter mid-render [#68150](https://github.com/woocommerce/woocommerce/pull/68150)
* Fix - Fix the Create shipping label button by showing a completion notice and a Reload page button after WooCommerce Shipping is installed and activated. [#67895](https://github.com/woocommerce/woocommerce/pull/67895)
* Fix - Fix the last_quarter end date in TimeInterval::get_timeframe_dates(), which used an invalid September 31 and rolled over to October 1, widening the quarter by a day. [#67787](https://github.com/woocommerce/woocommerce/pull/67787)
* Fix - Fix the oversized gap between the two buttons on the core profiler welcome screen at mobile widths. [#67729](https://github.com/woocommerce/woocommerce/pull/67729)
* Fix - Fix the PayPal API credentials settings link. [#68137](https://github.com/woocommerce/woocommerce/pull/68137)
* Fix - Fix the product short description editor becoming blank after moving its metabox. [#68433](https://github.com/woocommerce/woocommerce/pull/68433)
* Fix - Fix the Sale price dates help tip rendering below the Cancel link instead of next to its label in the product editor. [#67500](https://github.com/woocommerce/woocommerce/pull/67500)
* Fix - Fix the shipping method label's for attribute so it matches the input ID when a shipping package uses a non-numeric key. [#68020](https://github.com/woocommerce/woocommerce/pull/68020)
* Fix - Fix the shortcode checkout dropping every other field in the order fieldset when order notes are disabled, which also left a required field there blocking checkout with no way to fill it in. [#68169](https://github.com/woocommerce/woocommerce/pull/68169)
* Fix - Fix Variation Selector attribute rows being unselectable, and colliding with each other, for custom (non-taxonomy) product attributes in the editor. [#68198](https://github.com/woocommerce/woocommerce/pull/68198)
* Fix - Flush product count cache on plugin (de)activation so custom product statuses appear immediately. [#68734](https://github.com/woocommerce/woocommerce/pull/68734)
* Fix - Flush the order count cache when a plugin is activated or deactivated, so newly registered order statuses show up in the Orders list right away. [#68114](https://github.com/woocommerce/woocommerce/pull/68114)
* Fix - Handle read errors while streaming product downloads. [#67945](https://github.com/woocommerce/woocommerce/pull/67945)
* Fix - Harden the Back in Stock Notifications feature gate: honor the WOOCOMMERCE_BIS_ALPHA_ENABLED constant until the option migration runs, fail soft in NotificationQuery when the feature is off, make SignupRateLimiter static so SignupService::init() keeps its three-argument signature, and deprecate StockNotifications::init_hooks() in favor of maybe_init_services(). [#68771](https://github.com/woocommerce/woocommerce/pull/68771)
* Fix - Hide product and variation descriptions until the product password is entered. [#68371](https://github.com/woocommerce/woocommerce/pull/68371)
* Fix - Hide the postcode field and make the state optional for Qatar at checkout. [#68366](https://github.com/woocommerce/woocommerce/pull/68366)
* Fix - Hide the rating block on in-app Marketplace product cards when a product has no rating [#67882](https://github.com/woocommerce/woocommerce/pull/67882)
* Fix - Honor the Term ID sort order for product attribute terms and variation dropdowns. [#68517](https://github.com/woocommerce/woocommerce/pull/68517)
* Fix - Ignore array values for the analytics report export filename instead of raising a PHP warning. [#68293](https://github.com/woocommerce/woocommerce/pull/68293)
* Fix - Include selected "Any" variation values in classic cart and checkout displays and in new order item names, and stop variation values already shown in an item name from being repeated as cart or order metadata, including on existing orders. [#67527](https://github.com/woocommerce/woocommerce/pull/67527)
* Fix - Include WooCommerce user fields in currentUserData when the REST API has not been initialized. [#68319](https://github.com/woocommerce/woocommerce/pull/68319)
* Fix - Initialize new orders with the store's tax entry mode, and preserve saved order values when the store setting changes. [#67926](https://github.com/woocommerce/woocommerce/pull/67926)
* Fix - Internationalization: use the singular form for the variation report order count. [#67662](https://github.com/woocommerce/woocommerce/pull/67662)
* Fix - Interpolate trusted order table names directly instead of using the `%i` placeholder in the order data stores, list table, customer history meta box, and orders REST query, so these queries stay valid on database layers that run on a supported WordPress version but don't implement `%i`. [#66374](https://github.com/woocommerce/woocommerce/pull/66374)
* Fix - Interpolate trusted session table names directly instead of using the `%i` placeholder, so session queries stay valid on database layers that run on a supported WordPress version but don't implement `%i`. [#66372](https://github.com/woocommerce/woocommerce/pull/66372)
* Fix - Invalidate cached product terms when their taxonomy terms are reordered. [#67829](https://github.com/woocommerce/woocommerce/pull/67829)
* Fix - Keep an order on the Analytics failed imports list when its tax lookup rows could not be written, so a retry that fails again stays visible instead of reporting success. [#67896](https://github.com/woocommerce/woocommerce/pull/67896)
* Fix - Keep emailed Analytics report exports downloadable for a week instead of deleting them on the first request. [#68312](https://github.com/woocommerce/woocommerce/pull/68312)
* Fix - Keep other packages' shipping selections when one package's selection fails, and leave the rejected rate unselected so the shopper can retry it. [#68142](https://github.com/woocommerce/woocommerce/pull/68142)
* Fix - Keep product responses, admin variation screens and CSV exports working after one of a product's global attributes is deleted. [#68567](https://github.com/woocommerce/woocommerce/pull/68567)
* Fix - Keep refund rows' returning_customer NULL when a customer's first order is recalculated, so Analytics > Orders keeps reporting refunds with the refunded order's customer type [#67638](https://github.com/woocommerce/woocommerce/pull/67638)
* Fix - Keep Shop subpage rewrite rules in sync with the product permalink base. [#68089](https://github.com/woocommerce/woocommerce/pull/68089)
* Fix - Keep the Cart and Checkout incompatible extensions notices (editor sidebar and storefront banner) dismissed when an incompatible extension or payment gateway is disabled, and warn again only when something the merchant has not yet acknowledged becomes incompatible. Dismissals are now stored per site. Existing dismissals carry over on single-site installs but not on multisite installs, where notices may need to be dismissed again after upgrading. [#67910](https://github.com/woocommerce/woocommerce/pull/67910)
* Fix - Keep the dir and translate attributes wc_price() puts on the currency symbol when Product Elements, Wishlist, and Save for later swap price_html client-side, so RTL-script currency symbols keep honoring the currency position setting after hydration. [#68006](https://github.com/woocommerce/woocommerce/pull/68006)
* Fix - Keep the Settings UI Save button disabled when a visibility toggle restores the original values. [#67848](https://github.com/woocommerce/woocommerce/pull/67848)
* Fix - Left-align the action buttons on the Analytics settings page (Import historical data, and Reset defaults / Save settings) with the rest of the page content on wide viewports. [#67680](https://github.com/woocommerce/woocommerce/pull/67680)
* Fix - Limit the Recently Viewed Products widget query to the 15 most recent product IDs from the cookie. This prevents oversized cookies from increasing query workload while preserving normal browsing behavior. [#67825](https://github.com/woocommerce/woocommerce/pull/67825)
* Fix - Load the matching DataForm 17.1 stylesheet only for successfully resolved Settings UI pages. [#67369](https://github.com/woocommerce/woocommerce/pull/67369)
* Fix - Make sequential coupons with equal priorities calculate in application order. [#68030](https://github.com/woocommerce/woocommerce/pull/68030)
* Fix - Make the date_paid/date_completed day filter on the legacy orders list table respect the site timezone, so the listed orders match the requested local day. [#67134](https://github.com/woocommerce/woocommerce/pull/67134)
* Fix - Make the WooCommerce Admin header non-sticky on all pages. [#67379](https://github.com/woocommerce/woocommerce/pull/67379)
* Fix - Normalize checkbox description tooltip markup while preserving supported formatting. [#68200](https://github.com/woocommerce/woocommerce/pull/68200)
* Fix - Normalize customer emails in Back in Stock Notifications so signups and lookups match regardless of letter case, rewrite existing rows in the same form, and fix lookups for emails containing a single quote. [#68386](https://github.com/woocommerce/woocommerce/pull/68386)
* Fix - Normalize locale-formatted coupon minimum/maximum spend amounts before validating and storing them in WC_Coupon::set_minimum_amount() and WC_Coupon::set_maximum_amount(). [#68251](https://github.com/woocommerce/woocommerce/pull/68251)
* Fix - Only show "Free!" for Free Shipping in order emails, so zero cost Flat Rate and Local Pickup methods keep their titles, and add the woocommerce_email_order_shipping_show_free_label filter to override it [#68436](https://github.com/woocommerce/woocommerce/pull/68436)
* Fix - Pass product image IDs to WordPress attachment functions as integers. [#68447](https://github.com/woocommerce/woocommerce/pull/68447)
* Fix - Pass the include/exclude parameters through to the downloadable product search so the Grant access field on the order edit screen no longer lists products that are already selected. [#68166](https://github.com/woocommerce/woocommerce/pull/68166)
* Fix - Plugin install and activation failure notices now name the plugin once and state the reason WordPress reported (for example an unmet PHP version) instead of generic advice. [#68087](https://github.com/woocommerce/woocommerce/pull/68087)
* Fix - Prepare order-item deletion queries with an integer placeholder. [#67932](https://github.com/woocommerce/woocommerce/pull/67932)
* Fix - Preserve classic checkout order attribution when duplicate input groups exist outside the checkout form. [#67711](https://github.com/woocommerce/woocommerce/pull/67711)
* Fix - Preserve classic setting names, values, and visibility rules while canonicalizing typed Settings UI fields. [#67335](https://github.com/woocommerce/woocommerce/pull/67335)
* Fix - Preserve product data when saving a new product without a name in the classic editor by using the default “(no title)” name. [#68427](https://github.com/woocommerce/woocommerce/pull/68427)
* Fix - Preserve the current customer's login after a password reset without logging in a different customer. [#68387](https://github.com/woocommerce/woocommerce/pull/68387)
* Fix - Preserve third party attachment metadata keys when regenerating product images. [#67458](https://github.com/woocommerce/woocommerce/pull/67458)
* Fix - Preserve variation sale prices when a bulk decrease from regular prices is empty or invalid. [#68534](https://github.com/woocommerce/woocommerce/pull/68534)
* Fix - Prevent a false order cancellation error after shoppers refresh the return page. [#68141](https://github.com/woocommerce/woocommerce/pull/68141)
* Fix - Prevent bulk variation edits from racing unsaved variation changes. [#67943](https://github.com/woocommerce/woocommerce/pull/67943)
* Fix - Prevent duplicate customer entries in Analytics after manually creating guest orders without an email address. [#67722](https://github.com/woocommerce/woocommerce/pull/67722)
* Fix - Prevent duplicate Mini-Cart markup when a template part references a block pattern. [#67431](https://github.com/woocommerce/woocommerce/pull/67431)
* Fix - Prevent endpoint rewrite flushes from persisting incomplete rules during WordPress installation requests. [#67942](https://github.com/woocommerce/woocommerce/pull/67942)
* Fix - Prevent failed Store API batch requests from clearing the shopper's saved cart. [#68765](https://github.com/woocommerce/woocommerce/pull/68765)
* Fix - Prevent fatal errors when product attribute lookup updates run after a product is deleted. [#68100](https://github.com/woocommerce/woocommerce/pull/68100)
* Fix - Prevent featured image metadata loss when a WooCommerce image size is not registered. [#68008](https://github.com/woocommerce/woocommerce/pull/68008)
* Fix - Prevent invalid Product Filters block spacing values from being rendered. [#67974](https://github.com/woocommerce/woocommerce/pull/67974)
* Fix - Prevent Mini-Cart item removals from being cancelled when navigating away. [#68165](https://github.com/woocommerce/woocommerce/pull/68165)
* Fix - Prevent non-error checkout update notices from triggering field validation. [#68360](https://github.com/woocommerce/woocommerce/pull/68360)
* Fix - Prevent non-scalar cart item data provided by extensions from causing a fatal error when rendering the classic cart. [#67781](https://github.com/woocommerce/woocommerce/pull/67781)
* Fix - Prevent numbers from being saved as the thousand or decimal separator in currency settings. [#64248](https://github.com/woocommerce/woocommerce/pull/64248)
* Fix - Prevent price amounts from wrapping onto multiple lines in admin list tables when a space is used as the thousands separator. [#68115](https://github.com/woocommerce/woocommerce/pull/68115)
* Fix - Prevent product editor content from showing through the sticky editor tools. [#67382](https://github.com/woocommerce/woocommerce/pull/67382)
* Fix - Prevent recursive feature definition initialization when hooks check WooCommerce features during translation or option callbacks. [#68417](https://github.com/woocommerce/woocommerce/pull/68417)
* Fix - Prevent recursive product description formatting between the Product Description block and Store API product schema. [#67908](https://github.com/woocommerce/woocommerce/pull/67908)
* Fix - Prevent REST product update and duplicate requests from fatally erroring when given a variation ID, and preserve the stored product type instead of converting the product to simple when the requested type names no known class. [#67182](https://github.com/woocommerce/woocommerce/pull/67182)
* Fix - Prevent the Orders Analytics CSV export from logging warnings and writing a lone space when an order has no customer name. [#68393](https://github.com/woocommerce/woocommerce/pull/68393)
* Fix - Prevent Variation Selector placeholders from querying the Store API, which could break the editor preview or display unrelated attribute terms. [#68188](https://github.com/woocommerce/woocommerce/pull/68188)
* Fix - Prevent WP-CLI runs that skip the active theme from consuming queued rewrite flushes and dropping theme-registered rewrite rules. [#68146](https://github.com/woocommerce/woocommerce/pull/68146)
* Fix - Prioritize product title matches in default admin searches while preserving broad matches and explicit sorting. [#67508](https://github.com/woocommerce/woocommerce/pull/67508)
* Fix - Product review ratings posted as a fraction below one, such as 0.5, are no longer stored as a rating of 0. [#68268](https://github.com/woocommerce/woocommerce/pull/68268)
* Fix - Properly sanitize product category display settings before storage. [#67893](https://github.com/woocommerce/woocommerce/pull/67893)
* Fix - Recalculate shipping options as soon as the country is changed at checkout, instead of keeping the previous country's options until the rest of the address is filled in. [#68364](https://github.com/woocommerce/woocommerce/pull/68364)
* Fix - Redirect missing WooCommerce Admin task routes to Home instead of leaving a blank screen. [#67362](https://github.com/woocommerce/woocommerce/pull/67362)
* Fix - Refresh Analytics reports after saving report-affecting settings. [#67578](https://github.com/woocommerce/woocommerce/pull/67578)
* Fix - Refresh category, tag, and brand counts after an out-of-stock product visibility term is removed. [#67669](https://github.com/woocommerce/woocommerce/pull/67669)
* Fix - Refresh country, state, and continent names when the active locale changes. [#68381](https://github.com/woocommerce/woocommerce/pull/68381)
* Fix - Regenerate the missing combined translation file for WooCommerce Admin scripts on demand, so Analytics and other admin screens no longer show untranslated strings when the file is absent. [#67548](https://github.com/woocommerce/woocommerce/pull/67548)
* Fix - Register order withdrawal endpoint hooks only when the feature is enabled. [#68419](https://github.com/woocommerce/woocommerce/pull/68419)
* Fix - Reject array values for the wc-auth handshake parameters so they no longer cause a fatal error, and replace legacy WPCS suppression comments in the auth, REST authentication and PayPal IPN handlers with exact PHPCS annotations. [#68270](https://github.com/woocommerce/woocommerce/pull/68270)
* Fix - Remove empty spacing from product reviews when avatars are disabled. [#67600](https://github.com/woocommerce/woocommerce/pull/67600)
* Fix - Remove the stray blue box drawn around the selected Marketplace tab on WordPress 7.1. [#68078](https://github.com/woocommerce/woocommerce/pull/68078)
* Fix - Render Cart and Checkout notices with the same list markup whether there is one notice or several, and expose each notice's id as `data-id` on its list item. [#67635](https://github.com/woocommerce/woocommerce/pull/67635)
* Fix - Render the Analytics dashboard and repair the stored preference when the woocommerce_admin_dashboard_sections user meta is corrupted. [#67888](https://github.com/woocommerce/woocommerce/pull/67888)
* Fix - Report a customer's first order as new in Analytics regardless of the order in which its orders and refunds are imported [#67664](https://github.com/woocommerce/woocommerce/pull/67664)
* Fix - Report inherited password protection correctly for product variations in Store API responses. [#68431](https://github.com/woocommerce/woocommerce/pull/68431)
* Fix - Report nothing instead of everything in Analytics when the category and product filters have no product in common. An empty intersection was indistinguishable from an absent product filter, so both filters were dropped. Affects the products, products/stats, variations, variations/stats and orders/stats report endpoints. [#67626](https://github.com/woocommerce/woocommerce/pull/67626)
* Fix - Respect excluded order statuses in Analytics reports when a custom status slug exceeds the 20-character storage limit [#67694](https://github.com/woocommerce/woocommerce/pull/67694)
* Fix - Respect excluded order statuses in the Customer History metabox when a custom status slug exceeds the 20-character storage limit [#67700](https://github.com/woocommerce/woocommerce/pull/67700)
* Fix - Restore order notes when an HPOS order is untrashed, instead of leaving them permanently hidden. [#68206](https://github.com/woocommerce/woocommerce/pull/68206)
* Fix - Restore pending stock holds to prevent multiple payable orders from reserving the same stock. [#67931](https://github.com/woocommerce/woocommerce/pull/67931)
* Fix - Restore the cart context after hydrating a Store API route, so a front-end page render no longer inherits the store-api cart context and its shipping behaviour. [#67312](https://github.com/woocommerce/woocommerce/pull/67312)
* Fix - Restore the full Recently Viewed Products cookie ID list for widget query filters to preserve extension compatibility. [#67854](https://github.com/woocommerce/woocommerce/pull/67854)
* Fix - Restore the real image dimensions in the Featured Product and Featured Category image editor, which opened at a square default after WordPress 6.2 merged the image editing provider into the editor component. [#68189](https://github.com/woocommerce/woocommerce/pull/68189)
* Fix - Restore the table styles on the Settings > Emails listing. [#68498](https://github.com/woocommerce/woocommerce/pull/68498)
* Fix - Restore WordPress focus and modal styling, identify current navigation links, and preserve other plugins' navigation warnings in the experimental Settings UI. [#66867](https://github.com/woocommerce/woocommerce/pull/66867)
* Fix - Retry failed usage-tracking snapshot deliveries on the next scheduled run instead of silently dropping them for a week. [#68120](https://github.com/woocommerce/woocommerce/pull/68120)
* Fix - Return a Store API error response instead of a fatal error when the cart cannot be loaded from the session. [#67769](https://github.com/woocommerce/woocommerce/pull/67769)
* Fix - Return HTTP 429 instead of 400 when Store API requests exceed the rate limit. [#68066](https://github.com/woocommerce/woocommerce/pull/68066)
* Fix - Return is_super_admin and woocommerce_meta fields in users REST endpoint only for requests in 'edit' context, and only when requesting own user or with 'list_users' capability. [#68380](https://github.com/woocommerce/woocommerce/pull/68380)
* Fix - Run the product title in the single product reviews heading through wp_kses_post and replace legacy WPCS output suppressions with documented hooks and exact PHPCS annotations. [#68301](https://github.com/woocommerce/woocommerce/pull/68301)
* Fix - Sanitize the stock notifications My Account endpoint slug when saved from settings. [#68475](https://github.com/woocommerce/woocommerce/pull/68475)
* Fix - Saved for Later declares its auto-injection after the Cart block via block.json blockHooks, injects wherever the Cart block is used, stays registered while the feature is off to prevent an unsupported-block notice, and allows only one instance per page [#65977](https://github.com/woocommerce/woocommerce/pull/65977)
* Fix - Scope the stale task redirect to the Home screen and skip it when task lists have not loaded, so failed fetches or stray task params no longer navigate away. [#67811](https://github.com/woocommerce/woocommerce/pull/67811)
* Fix - Set tax_status to 'none' when creating fee order items from non-taxable cart fees. [#66302](https://github.com/woocommerce/woocommerce/pull/66302)
* Fix - Show a returning customer's saved country as a disabled option in the checkout country dropdown when the store no longer sells or ships to that country [#68056](https://github.com/woocommerce/woocommerce/pull/68056)
* Fix - Show each guest order's billing name in Analytics when orders share an email address. [#68311](https://github.com/woocommerce/woocommerce/pull/68311)
* Fix - Show every matching product when a search matches more than 100 products, in the Analytics > Products report and in the single category view of the Analytics > Categories report. The products report endpoints now accept a `search` argument and resolve the search themselves. [#67626](https://github.com/woocommerce/woocommerce/pull/67626)
* Fix - Show subscription expiry dates in the store's own date format and time zone, rather than an English-only ordinal on the UTC date. [#68916](https://github.com/woocommerce/woocommerce/pull/68916)
* Fix - Show the browser validation message for negative order item quantities in the admin order editor instead of silently failing, and reject them server-side in the order items AJAX endpoints. [#67921](https://github.com/woocommerce/woocommerce/pull/67921)
* Fix - Skip required validation for hidden address fields on the classic checkout and My Account address form. [#67706](https://github.com/woocommerce/woocommerce/pull/67706)
* Fix - Stock notifications: return the customer to the page they cancelled a notification from, instead of the first page of the list. [#64439](https://github.com/woocommerce/woocommerce/pull/64439)
* Fix - Stop attributing refunds to user #1 when no user is logged in. refunded_by is now 0 in REST v1-v3 and null in v4, and the admin labels these refunds as System. [#68428](https://github.com/woocommerce/woocommerce/pull/68428)
* Fix - Stop locale filters that read country, state, or continent data from recursing when geographical data is looked up. [#68573](https://github.com/woocommerce/woocommerce/pull/68573)
* Fix - Stop rebuilding a WC Tracker snapshot on every daily run when building it fails. [#68225](https://github.com/woocommerce/woocommerce/pull/68225)
* Fix - Stop the Back in Stock form from rendering inside the Add to Cart + Options block, which forced the block into a legacy HTML form. [#68385](https://github.com/woocommerce/woocommerce/pull/68385)
* Fix - Stop the daily scheduled-sales cron reprocessing every completed scheduled sale as both a starting and an ending sale. Developer note: on a store whose only matches were completed sales, all four of wc_before/after_products_starting_sales and wc_before/after_products_ending_sales stop firing rather than firing with a shorter list, and the daily `wc_products_onsale` transient delete and product transient-version bump stop with them. All of these still run whenever a sale genuinely starts or ends. [#67958](https://github.com/woocommerce/woocommerce/pull/67958)
* Fix - Stop the virtual keyboard from opening on the core profiler platform selector on touch devices. [#68258](https://github.com/woocommerce/woocommerce/pull/68258)
* Fix - Stop wrapping block checkout autofill hints in a billing/shipping prefix the HTML autofill grammar rejects. Browsers offer saved values on the email field again, and a field an extension set to "off" stays opted out [#68394](https://github.com/woocommerce/woocommerce/pull/68394)
* Fix - Store API: the cart items endpoint now publishes and validates extensions registered against `cart-item`, rather than those registered against `product`. The order items schema, which isn't extendable, no longer advertises `product` extensions it never returned. [#68357](https://github.com/woocommerce/woocommerce/pull/68357)
* Fix - Store API: the order endpoint no longer reports a hidden metadata row's ID on an item_data entry an extension appended. That entry now correctly reports a null `id`. [#68390](https://github.com/woocommerce/woocommerce/pull/68390)
* Fix - Store API: the order endpoint now returns item_data as a list, matching the cart endpoint and its own documented schema. Each entry carries its metadata row ID in a new `id` property, null when an extension added the entry without a stored row. [#68161](https://github.com/woocommerce/woocommerce/pull/68161)
* Fix - Store one wc_order_tax_lookup row per tax order item, so Analytics tax reports keep every tax line of an order, including lines that share a tax rate id, and drop rows for tax lines that have been removed. [#67896](https://github.com/woocommerce/woocommerce/pull/67896)
* Fix - Store the default Cart page empty cart headings as block pattern references so they follow the site language instead of the install language, and restore the missing "Browse store" link. [#67651](https://github.com/woocommerce/woocommerce/pull/67651)
* Fix - Strip invisible Unicode characters from phone numbers so pasted numbers are not rejected over characters the customer cannot see, store the cleaned number from the Checkout block and the My Account address form, and stop the classic checkout marking the field invalid. wc_remove_non_displayable_chars() now removes every Unicode default-ignorable code point, including the word joiner (U+2060) and the variation selectors it used to keep. [#68164](https://github.com/woocommerce/woocommerce/pull/68164)
* Fix - Surface WooCommerce.com API failures on My Subscriptions instead of rendering an empty subscription list, including the rate-limit message for the whole backoff window after an HTTP 429. [#67832](https://github.com/woocommerce/woocommerce/pull/67832)
* Fix - Three small Marketplace fixes: the clear button in the search field only shows when there is text to clear and resets the results, search results get a "Results for" heading, and the WooCommerce.com account menu link reads "Your WooCommerce.com account" and points at My account. [#68429](https://github.com/woocommerce/woocommerce/pull/68429)
* Fix - Treat array-valued order keys as invalid on the order pay, cancel and PayPal return paths instead of raising a PHP error. [#68307](https://github.com/woocommerce/woocommerce/pull/68307)
* Fix - Treat product download links whose query arguments arrive as arrays as invalid links instead of letting them raise a PHP error. [#68265](https://github.com/woocommerce/woocommerce/pull/68265)
* Fix - Unify postcode validation rules used by the server and Checkout blocks. [#67780](https://github.com/woocommerce/woocommerce/pull/67780)
* Fix - Unregister a global product attribute's runtime taxonomy when the attribute is deleted so its slug can be reused in the same request. [#68212](https://github.com/woocommerce/woocommerce/pull/68212)
* Fix - Update mobile app QR login session handling. [#68540](https://github.com/woocommerce/woocommerce/pull/68540)
* Fix - Update product rating aggregates when REST API reviews are created, re-rated, or moved between products in wc/v1, wc/v2, and wc/v3. [#67778](https://github.com/woocommerce/woocommerce/pull/67778)
* Fix - Update the Import historical data description in Analytics settings to stop referencing activating WooCommerce Admin. [#67723](https://github.com/woocommerce/woocommerce/pull/67723)
* Fix - Update the Mastercard payment-card label to use the brand's current spelling. [#67698](https://github.com/woocommerce/woocommerce/pull/67698)
* Fix - Use the canonical customer effort score submit label property for inline survey dispatches. [#68222](https://github.com/woocommerce/woocommerce/pull/68222)
* Fix - Use the site timezone instead of the server timezone for the default reference date in TimeInterval::get_timeframe_dates(), so remote spec timeframe rules select the correct period near period boundaries. [#67827](https://github.com/woocommerce/woocommerce/pull/67827)
* Fix - Validate minimum spend amount does not exceed maximum spend amount in WC_Coupon::set_minimum_amount(). [#67703](https://github.com/woocommerce/woocommerce/pull/67703)
* Fix - Validate post-action webhooks using the affected post ID instead of request-global post type state. [#68208](https://github.com/woocommerce/woocommerce/pull/68208)
* Fix - Validate Settings UI schemas and script handles before mounting, with a complete classic fallback for server-side failures. [#67334](https://github.com/woocommerce/woocommerce/pull/67334)
* Fix - Variation gallery: stop persisting the inherited parent image on variation save, prefer variation-owned galleries on the storefront, and clean up previously frozen variation thumbnails. [#68389](https://github.com/woocommerce/woocommerce/pull/68389)
* Add - Add an "Automatic updates" column to the My Subscriptions screen that turns auto-updates on or off for installed extensions and themes, and shows "Blocked" when they are on but something else stops the product updating [#68410](https://github.com/woocommerce/woocommerce/pull/68410)
* Add - Add an "Awaiting confirmation" section to the Stock notifications My Account tab, listing unconfirmed sign-ups with Resend email and Cancel actions above the active notifications table. [#68295](https://github.com/woocommerce/woocommerce/pull/68295)
* Add - Add an $orderby argument to wc_get_product_category_list() and order single-product meta categories by hierarchy. Stores on the stock single-product/meta.php template now render categories ancestor-first; return an empty string from woocommerce_product_meta_category_orderby to restore WordPress term-list order. [#67633](https://github.com/woocommerce/woocommerce/pull/67633)
* Add - Add an order-aware filter for failed order confirmation messages in classic and block renderers. [#68221](https://github.com/woocommerce/woocommerce/pull/68221)
* Add - Add a Role column to the Analytics > Customers report and its CSV export, showing each customer's WordPress role(s). [#67653](https://github.com/woocommerce/woocommerce/pull/67653)
* Add - Add a skip action for individual Things to do next tasks. [#66199](https://github.com/woocommerce/woocommerce/pull/66199)
* Add - Add a Stock notifications setting under Settings > Advanced > Account endpoints, so the My Account endpoint slug can be renamed or cleared to turn the page off. [#68291](https://github.com/woocommerce/woocommerce/pull/68291)
* Add - Add a Stock notifications tab to My Account, so customers can review the back-in-stock sign-ups they have made and cancel the ones they no longer want. [#64439](https://github.com/woocommerce/woocommerce/pull/64439)
* Add - Add a taxable amount column to the Analytics Taxes report, recording the net amount each tax rate applied to. [#68233](https://github.com/woocommerce/woocommerce/pull/68233)
* Add - Add a woocommerce_store_api_cart_item_quantity_validation filter so extensions can validate cart item quantity changes made via the Store API. [#67928](https://github.com/woocommerce/woocommerce/pull/67928)
* Add - Add billing and shipping phone columns to the Analytics Customers report, its REST API, and CSV export. [#67641](https://github.com/woocommerce/woocommerce/pull/67641)
* Add - Add configurable customer and merchant emails for order withdrawal requests. [#67799](https://github.com/woocommerce/woocommerce/pull/67799)
* Add - Add Elavon to payments extension suggestions. [#68923](https://github.com/woocommerce/woocommerce/pull/68923)
* Add - Add errored_coupon and errored_coupon_in_checkout JS events fired when a coupon fails to apply on the classic cart and checkout pages. [#66285](https://github.com/woocommerce/woocommerce/pull/66285)
* Add - Add inbox notice pointing merchants to the full refund data fix tool [#66265](https://github.com/woocommerce/woocommerce/pull/66265)
* Add - Add notices under WooCommerce.com extensions on the Plugins screen when the store isn't connected, the extension has no subscription, or its subscription has expired or is about to expire without auto-renew, and make the renew link renew that subscription rather than add the product to the cart [#68916](https://github.com/woocommerce/woocommerce/pull/68916)
* Add - Add Off, Mobile, and Always overlay modes to Product Filters block. [#67696](https://github.com/woocommerce/woocommerce/pull/67696)
* Add - Add rate-limit (HTTP 429) backoff for WooCommerce.com update-check and subscriptions API requests, respecting the Retry-After header. [#67004](https://github.com/woocommerce/woocommerce/pull/67004)
* Add - Add sticky positioning support to the Product Filters block. [#68256](https://github.com/woocommerce/woocommerce/pull/68256)
* Add - Add support for border and shadow styles to the Product Quantity block and also apply them to the Cart quantity selector [#68148](https://github.com/woocommerce/woocommerce/pull/68148)
* Add - Add support for border radius styles in the Product Quantity block [#68000](https://github.com/woocommerce/woocommerce/pull/68000)
* Add - Add support for border styles to the Product Image block [#68342](https://github.com/woocommerce/woocommerce/pull/68342)
* Add - Add support for text and background color styles in the Product Quantity block [#68040](https://github.com/woocommerce/woocommerce/pull/68040)
* Add - Add support for the `date` field type in the additional checkout fields API. [#68048](https://github.com/woocommerce/woocommerce/pull/68048)
* Add - Add support for typography, padding, and border radius styles to the Chips block [#68105](https://github.com/woocommerce/woocommerce/pull/68105)
* Add - Add the WIR franc (CHW) to the list of available store currencies. [#68442](https://github.com/woocommerce/woocommerce/pull/68442)
* Add - Add the `woocommerce_admin_report_server_side_search_item_types` JavaScript filter, so an integration that overrides an Analytics report route with a handler that does not read `search` can opt out of server-side search and keep receiving resolved item IDs. [#67626](https://github.com/woocommerce/woocommerce/pull/67626)
* Add - Add tracking for product sorting views and manual reordering. [#67782](https://github.com/woocommerce/woocommerce/pull/67782)
* Add - Add woocommerce_order_removed_coupon action hook to WC_Order::remove_coupon() for parity with WC_Cart and the existing woocommerce_order_applied_coupon hook. [#64361](https://github.com/woocommerce/woocommerce/pull/64361)
* Add - Add `min` and `max` options to `date` additional checkout fields, accepting an absolute date or an ISO 8601-2 duration relative to today such as `P1D` or `-P18Y`. [#68083](https://github.com/woocommerce/woocommerce/pull/68083)
* Add - Allow additional date fields in Checkout block to use JSON Schema in validation. [#68743](https://github.com/woocommerce/woocommerce/pull/68743)
* Add - Honor the WooCommerce.com `autoupdate` flag on plugin and theme updates, so a critical extension release can be installed automatically when the package is installable. Theme update items now also report their PHP requirement, so an automatic update is skipped on an incompatible PHP version. [#68068](https://github.com/woocommerce/woocommerce/pull/68068)
* Add - Introduce two new PHP filters, woocommerce_analytics_settings_default_excluded_order_statuses and woocommerce_analytics_settings_default_actionable_order_statuses, that let plugins change the default order statuses used by Analytics. The filters apply everywhere, not only to the boxes pre-checked on the Analytics Settings screen: on a store that has never saved these options they also change report totals, the order status enum returned by the reports REST controllers, the Activity Panel orders-to-fulfill count, and the Customer History box. [#66288](https://github.com/woocommerce/woocommerce/pull/66288)
* Add - Store API: add `raw_key` to cart item `item_data` so extensions can identify their own entries without matching a translated label. [#68388](https://github.com/woocommerce/woocommerce/pull/68388)
* Add - Use GTIN, UPC, EAN, or ISBN as the match key for existing product and variation CSV updates when ID and SKU are absent, and let a variation row identified only by one create a new variation. [#67940](https://github.com/woocommerce/woocommerce/pull/67940)
* Update - Analytics: search the Downloads report's advanced filter by customer name, username or email instead of username only. [#68139](https://github.com/woocommerce/woocommerce/pull/68139)
* Update - Deprecate the WC_Brands recount methods in favor of the shared term recount functions. [#67657](https://github.com/woocommerce/woocommerce/pull/67657)
* Update - Marketplace: report whether a product card shows the quality badge in the card click tracking event. [#68878](https://github.com/woocommerce/woocommerce/pull/68878)
* Update - Move the experimental dual API engine out of WooCommerce core into the WooCommerce Dual API plugin. [#68287](https://github.com/woocommerce/woocommerce/pull/68287)
* Update - Move the quality badge above the price on in-app marketplace cards (between the name and the price on compact cards), centre compact card content vertically, and pin the price row to the bottom of regular cards. [#68259](https://github.com/woocommerce/woocommerce/pull/68259)
* Update - Remove 20 WooCommerce patterns from the pattern library. [#68132](https://github.com/woocommerce/woocommerce/pull/68132)
* Update - Remove account creation from Back in Stock guest sign-ups and stop linking guest sign-ups to existing accounts by email. [#68762](https://github.com/woocommerce/woocommerce/pull/68762)
* Update - Remove Helio Pay as official and suggested payments extension. [#68928](https://github.com/woocommerce/woocommerce/pull/68928)
* Update - Remove the Activity panel from WooCommerce pages while keeping the Inbox on Woo Home. [#67719](https://github.com/woocommerce/woocommerce/pull/67719)
* Update - Remove the experimental abandoned cart recovery feature. [#67726](https://github.com/woocommerce/woocommerce/pull/67726)
* Update - Rename patterns category from WooCommerce to Shop [#67874](https://github.com/woocommerce/woocommerce/pull/67874)
* Update - Rename the default Payment method option on the order screen from "N/A" to "All methods available", so it says what the customer will actually be offered. [#68187](https://github.com/woocommerce/woocommerce/pull/68187)
* Update - Send the installed version of each WooCommerce.com extension in the update-check request. [#68068](https://github.com/woocommerce/woocommerce/pull/68068)
* Update - Update GoCardless, Airwallex, and Viva.com Smart Checkout payments extension suggestions. [#68927](https://github.com/woocommerce/woocommerce/pull/68927)
* Update - Update Mini-Cart drawer header style to use smaller font size and align it with the close button [#68432](https://github.com/woocommerce/woocommerce/pull/68432)
* Update - Update react-number-format from 4.9.3 to 5.4.5. [#67806](https://github.com/woocommerce/woocommerce/pull/67806)
* Update - Update the Action Scheduler package to version 4.1.0. [#67427](https://github.com/woocommerce/woocommerce/pull/67427)
* Update - Update the default Mini-Cart labels. [#67469](https://github.com/woocommerce/woocommerce/pull/67469)
* Update - Update the plugin directory product screenshots with the correct heading design. [#67581](https://github.com/woocommerce/woocommerce/pull/67581)
* Update - Update the vendored webonyx/graphql-php to 15.32.3 to limit parser recursion and field comparisons. [#67596](https://github.com/woocommerce/woocommerce/pull/67596)
* Dev - Add a PHPCS sniff that flags unguarded use of the `%i` SQL identifier placeholder in `wpdb::prepare()` calls, so trusted identifiers are interpolated directly (or `%i` is guarded with `wpdb::has_cap( 'identifier_placeholders' )`). [#66380](https://github.com/woocommerce/woocommerce/pull/66380)
* Dev - Add a regression test covering that the stock notifications My Account endpoint slug is sanitized when saved through the REST settings API. [#68542](https://github.com/woocommerce/woocommerce/pull/68542)
* Dev - Add per-country, per-section contract tests pinning the Payments settings partner recommendations, replacing two duplicated suggestion-count data providers and several per-country spot tests. [#67428](https://github.com/woocommerce/woocommerce/pull/67428)
* Dev - Add Playwright e2e coverage for the Back in Stock Notifications signup, email, and admin management flows. [#64482](https://github.com/woocommerce/woocommerce/pull/64482)
* Dev - Add unit tests for CSVUploadHelper. [#68636](https://github.com/woocommerce/woocommerce/pull/68636)
* Dev - Allow running the PHPUnit suite without the code hacker by setting the WC_TEST_DISABLE_CODE_HACKER environment variable, for tools such as mutation testers that need to own the file stream wrapper. [#68195](https://github.com/woocommerce/woocommerce/pull/68195)
* Dev - Always return a string from the price separator sanitize filters. [#68842](https://github.com/woocommerce/woocommerce/pull/68842)
* Dev - Clear the WC singleton cart, cart context, notice queue, and cached country locale in the base test case teardown, and remove the per-class cleanup that is now redundant. [#67437](https://github.com/woocommerce/woocommerce/pull/67437)
* Dev - Correct PHPCS slow query suppressions for empty product widget query containers. [#67823](https://github.com/woocommerce/woocommerce/pull/67823)
* Dev - Correct the Store API cart and checkout hook docblocks, and say where the local pickup tax filters are documented. [#68153](https://github.com/woocommerce/woocommerce/pull/68153)
* Dev - Declare the UUID dependency required by WooCommerce Admin builds. [#67822](https://github.com/woocommerce/woocommerce/pull/67822)
* Dev - Document intentional product, order, and payment markup contracts with exact coding-standard annotations. [#67947](https://github.com/woocommerce/woocommerce/pull/67947)
* Dev - Document intentional raw-data boundaries in the settings APIs with exact coding-standard annotations. [#67894](https://github.com/woocommerce/woocommerce/pull/67894)
* Dev - Document what Enums get_all() returns compared with the filterable wc_get_*() helpers, including the differing return shapes and the wc- prefix on order statuses. [#67889](https://github.com/woocommerce/woocommerce/pull/67889)
* Dev - Exclude the hook comment and hyphenated hook name phpcs sniffs for tests and remove the redundant inline ignores. [#67748](https://github.com/woocommerce/woocommerce/pull/67748)
* Dev - Fix the classic-assets stylelint setup to parse SCSS and clean up the violations it surfaced. Tooling and source-formatting only, no functional CSS changes. [#68072](https://github.com/woocommerce/woocommerce/pull/68072)
* Dev - Fix the product and add to cart block hook docblocks. [#68154](https://github.com/woocommerce/woocommerce/pull/68154)
* Dev - Fix the WooCommerce Blocks hook docs pipeline (build:docs) and regenerate the hooks reference (filters.md, actions.md) from the current PHP sources. [#67839](https://github.com/woocommerce/woocommerce/pull/67839)
* Dev - Guard every hook.doc read in the Blocks hook docs generator. No change to the generated reference. [#68151](https://github.com/woocommerce/woocommerce/pull/68151)
* Dev - Make the Blocks e2e seed re-runnable and fail loudly on a broken step. [#67707](https://github.com/woocommerce/woocommerce/pull/67707)
* Dev - Move additional checkout field type behavior into per-type classes, and field value storage into a trait, with no change in behavior. [#68081](https://github.com/woocommerce/woocommerce/pull/68081)
* Dev - Move Back in Stock Notifications activation from the WOOCOMMERCE_BIS_ALPHA_ENABLED wp-config constant to a normal feature toggle at WooCommerce → Settings → Advanced → Features → Experimental. [#64490](https://github.com/woocommerce/woocommerce/pull/64490)
* Dev - Move the classic-theme block style decision cache from a function-local static to a BlockTypesController instance property so it can be isolated in PHP tests. [#68249](https://github.com/woocommerce/woocommerce/pull/68249)
* Dev - Pin date_paid on the Orders Stats report test fixtures so a run that crosses the top of the hour no longer drops orders out of the queried window. [#68665](https://github.com/woocommerce/woocommerce/pull/68665)
* Dev - Pin the refund fixtures' dates in the Orders Stats report tests, closing the half of the hour-boundary flake that pinning the orders alone left open. [#68675](https://github.com/woocommerce/woocommerce/pull/68675)
* Dev - Product ordering: start legacy algorithm deprecation cycle. [#67812](https://github.com/woocommerce/woocommerce/pull/67812)
* Dev - Remove an unnecessary coding-standard suppression from product review rating counts. [#67824](https://github.com/woocommerce/woocommerce/pull/67824)
* Dev - Remove an unused Reviews by Product editor stylesheet. [#67612](https://github.com/woocommerce/woocommerce/pull/67612)
* Dev - Remove core E2E tests whose coverage exists elsewhere: the duplicated logged-in Checkout Link block, the WordPress-core lost password specs, and seven of eight identical order status filter cases. [#68207](https://github.com/woocommerce/woocommerce/pull/68207)
* Dev - Remove IE8-era leftovers from the classic-assets build: the ie8 uglify flag, the IE 8/9 browserslist targets, and two dead IE-only CSS hacks. Minified output changes; no behavior change on any supported browser. [#68077](https://github.com/woocommerce/woocommerce/pull/68077)
* Dev - Remove the duplicated Variant SKU entry from the Shopify importer column mapping. [#68226](https://github.com/woocommerce/woocommerce/pull/68226)
* Dev - Remove the experimental Agentic Checkout API. [#67914](https://github.com/woocommerce/woocommerce/pull/67914)
* Dev - Remove the no-op autoprefixer step from the legacy assets CSS build and clean the obsolete vendor prefixes it was stripping from the sources. Built CSS is unchanged. [#68061](https://github.com/woocommerce/woocommerce/pull/68061)
* Dev - Remove two stale PHPStan baseline entries for TransientFilesEngine that no longer match any reported error. [#67672](https://github.com/woocommerce/woocommerce/pull/67672)
* Dev - Replace legacy WPCS suppression comments in the widget rendering paths with exact PHPCS annotations, and run the remaining widget form setting labels through wp_kses_post(). [#68267](https://github.com/woocommerce/woocommerce/pull/68267)
* Dev - Replace legacy WPCS suppression comments on extension-facing SQL and order note queries with scoped phpcs:ignore annotations. [#68298](https://github.com/woocommerce/woocommerce/pull/68298)
* Dev - Replace legacy WPCS suppression comments on REST product and variation meta queries with explicit phpcs:ignore annotations that record why postmeta remains the correct path. [#68299](https://github.com/woocommerce/woocommerce/pull/68299)
* Dev - Replace legacy WPCS suppression comments with PHPCS directives. [#67752](https://github.com/woocommerce/woocommerce/pull/67752)
* Dev - Resolve custom PHPCS sniff paths relative to the WooCommerce ruleset. [#67776](https://github.com/woocommerce/woocommerce/pull/67776)
* Dev - Revert the @woocommerce/classic-assets node build script and restore the Grunt pipeline. Built assets are unchanged either way. [#68202](https://github.com/woocommerce/woocommerce/pull/68202)
* Dev - Run Core API tests with usage tracking enabled in pull request, nightly, and release CI. [#68274](https://github.com/woocommerce/woocommerce/pull/68274)
* Dev - Seed deterministic ratings and sales data for Product Collection Blocks E2E sorting tests. [#67512](https://github.com/woocommerce/woocommerce/pull/67512)
* Dev - Settings registration now runs on `admin_init` at priority 999 instead of the default 10, so it runs after other callbacks on that hook rather than before. Code that unhooks it must match the new priority: `remove_action( 'admin_init', array( WC(), 'register_wp_admin_settings' ), 999 )`; the no-priority form that matches in 11.0.1 and 11.1 silently stops matching. [#67718](https://github.com/woocommerce/woocommerce/pull/67718)
* Dev - Skip push notification scheduling and the loopback request when no push tokens are registered [#68841](https://github.com/woocommerce/woocommerce/pull/68841)
* Dev - Speed up block template customization end-to-end tests using REST API setup and cleanup. [#67561](https://github.com/woocommerce/woocommerce/pull/67561)
* Dev - Split the legacy Orders Stats report test class into focused test classes under tests/php/src, with no change in coverage [#68026](https://github.com/woocommerce/woocommerce/pull/68026)
* Dev - Spread the actual @wordpress/date module in the import status bar test mock. [#67629](https://github.com/woocommerce/woocommerce/pull/67629)
* Dev - Surface PHPCS findings as inline annotations on a pull request's Files changed tab. [#66989](https://github.com/woocommerce/woocommerce/pull/66989)
* Dev - Update npm dependencies and remove unused build tools to close more Dependabot alerts. [#67962](https://github.com/woocommerce/woocommerce/pull/67962)
* Dev - Update npm dependencies that resolve high-severity security advisories. [#67844](https://github.com/woocommerce/woocommerce/pull/67844)
* Dev - Update PHP development dependencies to versions that resolve reported security advisories. [#67603](https://github.com/woocommerce/woocommerce/pull/67603)
* Dev - Update term count release version metadata. [#67887](https://github.com/woocommerce/woocommerce/pull/67887)
* Dev - Use the tooling catalog for shared Babel, PostCSS, and webpack versions. [#67842](https://github.com/woocommerce/woocommerce/pull/67842)
* Dev - Use WooCommerce Core versions in JavaScript deprecation notices. [#67615](https://github.com/woocommerce/woocommerce/pull/67615)
* Dev - wc_order_tax_lookup gains an order_item_id column and is re-keyed on (order_id, tax_rate_id, order_item_id), so it now holds one row per tax line instead of one row per tax rate. Code summing the table is unaffected and code counting rows will see more of them. Code writing to the table with $wpdb->replace() on (order_id, tax_rate_id) lands on the new column's zero default rather than replacing the rows WooCommerce writes for that order. The reports leave such a row out while those rows stand, so its values are not read at all and it needs to write order_item_id too. Existing rows are rebuilt in the background, and can be rebuilt by hand from WooCommerce > Status > Tools. [#68374](https://github.com/woocommerce/woocommerce/pull/68374)
* Tweak - Add search, pagination, and an empty state to the order edit Add tax modal. [#66039](https://github.com/woocommerce/woocommerce/pull/66039)
* Tweak - Give nice names to webpack JS and CSS dynamic chunks [#49368](https://github.com/woocommerce/woocommerce/pull/49368)
* Tweak - Size the Catalog Sorting block to the selected option. [#67607](https://github.com/woocommerce/woocommerce/pull/67607)
* Tweak - Three small Marketplace UI fixes: the Plugins > Add Plugin "WooCommerce Marketplace" tab lands on Discover, the Extensions page title matches other admin page titles, and compact product cards show the "Sponsored" label. [#68411](https://github.com/woocommerce/woocommerce/pull/68411)
* Tweak - Update Antom payment gateway icon to use partner-supplied brand logo [#64584](https://github.com/woocommerce/woocommerce/pull/64584)
* Performance - Avoid running Inbox Note cleanup during admin initialization. [#68088](https://github.com/woocommerce/woocommerce/pull/68088)
* Performance - Avoid site-wide orphan cleanup after product CSV imports. [#68090](https://github.com/woocommerce/woocommerce/pull/68090)
* Performance - Cache CSV importer original-ID lookups within each import batch, so CSVs with repeated IDs or many product references (grouped, upsell, cross-sell) no longer run the same postmeta query for every occurrence. [#68018](https://github.com/woocommerce/woocommerce/pull/68018)
* Performance - Cap variable product prices transient size. [#68058](https://github.com/woocommerce/woocommerce/pull/68058)
* Performance - Check likely-purchasable variations first in WC_Product_Variable::has_purchasable_variations() so listings and Store API responses stop hydrating every variation of each variable product. [#68272](https://github.com/woocommerce/woocommerce/pull/68272)
* Performance - Count the customer and review report totals with aggregate queries instead of one query per bucket. [#68302](https://github.com/woocommerce/woocommerce/pull/68302)
* Performance - Fixed ordering products performance (N-query pattern). [#66603](https://github.com/woocommerce/woocommerce/pull/66603)
* Performance - Improve performance when product reviews are disabled by skipping product rating lookup table updates. [#66524](https://github.com/woocommerce/woocommerce/pull/66524)
* Performance - Memoize the payment extension suggestions list per country and context so it is built once per request instead of once per registered gateway. [#66341](https://github.com/woocommerce/woocommerce/pull/66341)
* Performance - REST API: in the wc/v4 customers endpoint, only compute the order count, total spent and avatar fields when they are requested via _fields, avoiding wasted per-customer aggregate queries on sparse requests. [#66072](https://github.com/woocommerce/woocommerce/pull/66072)
* Performance - Sort the products widget by sales and the top rated products widget by rating through the product lookup table instead of post meta. [#68300](https://github.com/woocommerce/woocommerce/pull/68300)
* Performance - Tune terms and post meta cache invalidation during product saving. [#66966](https://github.com/woocommerce/woocommerce/pull/66966)
* Enhancement - Add a dismiss button and an inline disconnect link to the connected account banner on the marketplace's My Subscriptions tab. [#68412](https://github.com/woocommerce/woocommerce/pull/68412)
* Enhancement - Add a reusable CSS class to product names in improved order emails. [#67764](https://github.com/woocommerce/woocommerce/pull/67764)
* Enhancement - Add a variation bulk action to set sale prices from regular prices. [#68520](https://github.com/woocommerce/woocommerce/pull/68520)
* Enhancement - Add customer stock notifications settings and notification counts to the WooCommerce usage tracker snapshot. [#68821](https://github.com/woocommerce/woocommerce/pull/68821)
* Enhancement - Cart and Checkout blocks: give the order summary a fixed 360px column and hold the single-column layout until there is room for both columns, so mid-range viewports are no longer cramped. [#68363](https://github.com/woocommerce/woocommerce/pull/68363)
* Enhancement - Format count values in the legacy Reports chart legends with locale-aware thousands separators. [#68051](https://github.com/woocommerce/woocommerce/pull/68051)
* Enhancement - Improve photoswipe error message. [#68909](https://github.com/woocommerce/woocommerce/pull/68909)
* Enhancement - Include the report's date range in emailed Analytics exports, in the email and in the downloaded file's name. [#68469](https://github.com/woocommerce/woocommerce/pull/68469)
* Enhancement - Open the product picker automatically when adding products to an order, so merchants can start typing without an extra click. [#66905](https://github.com/woocommerce/woocommerce/pull/66905)
* Enhancement - Rate limit stock notification sign-ups per client and e-mail address. [#68538](https://github.com/woocommerce/woocommerce/pull/68538)


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