== Changelog == = 11.0.1 2026-08-10 = **WooCommerce** * Fix - Fixed admin settings initialization. [#67532](https://github.com/woocommerce/woocommerce/pull/67532) * Fix - Fix order list checkbox interactions and responsive layout with WordPress 7.1. [#67364](https://github.com/woocommerce/woocommerce/pull/67364) * Fix - Prevent password-protected products from exposing short descriptions before authentication. [#67557](https://github.com/woocommerce/woocommerce/pull/67557) * Fix - Sanitize the single dismissible store notice before rendering so entity-encoded HTML in Store API error messages (e.g. a product name) cannot execute script on the Cart and Checkout blocks. [#67476](https://github.com/woocommerce/woocommerce/pull/67476) * Fix - Store API: Always resolve the cart token from a consistent place. [#67550](https://github.com/woocommerce/woocommerce/pull/67550) * Fix - Store API: improve coupon handling for order payments. [#67549](https://github.com/woocommerce/woocommerce/pull/67549) * Fix - Tighten authorization checks on the Marketplace subscription activate endpoint. [#67567](https://github.com/woocommerce/woocommerce/pull/67567) * Fix - Tighten authorization checks on the review-order shortcode. [#67552](https://github.com/woocommerce/woocommerce/pull/67552) * Fix - Update product button label checks. [#67558](https://github.com/woocommerce/woocommerce/pull/67558) * Fix - Update product image SKU match checks [#67530](https://github.com/woocommerce/woocommerce/pull/67530) * Fix - Update session cookies hashing [#67408](https://github.com/woocommerce/woocommerce/pull/67408) * Fix - Update theme onboarding checks [#67533](https://github.com/woocommerce/woocommerce/pull/67533) * Fix - Validate Analytics report export arguments orderby against the target report's schema. [#67551](https://github.com/woocommerce/woocommerce/pull/67551) * Fix - Validate the Analytics order date type option against known columns. [#67554](https://github.com/woocommerce/woocommerce/pull/67554) * Add - Add a woocommerce_order_step_logging_enabled filter that allows disabling per-order place-order-debug logging without raising the site-wide logging level threshold. [#67410](https://github.com/woocommerce/woocommerce/pull/67410) * Dev - Accept the WordPress 7.1 list table check-column markup in the reviews list table row test. [#67517](https://github.com/woocommerce/woocommerce/pull/67517) * Dev - Add a PHP_CodeSniffer rule requiring the Store API cart token to be read through CartTokenUtils::get_request_cart_token(). [#67550](https://github.com/woocommerce/woocommerce/pull/67550) * Dev - Update the JS file count test for WordPress 7.1. [#67473](https://github.com/woocommerce/woocommerce/pull/67473) * Performance - Log writes no longer scan the whole wc-logs directory to locate their target file (the path is now constructed deterministically), and the daily place-order debug log cleanup now deletes a bounded batch per run and reschedules itself until the backlog is drained, instead of stopping at 100 files per day. [#67410](https://github.com/woocommerce/woocommerce/pull/67410) = 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) = 10.9.4 2026-07-07 = **WooCommerce** * Fix - Fix is_vat_exempt being not correctly applied during block checkout for logged-in users. [#66342](https://github.com/woocommerce/woocommerce/pull/66342) = 10.9.3 2026-07-03 = **WooCommerce** * Fix - Fix a fatal error in WC_Email::send_notification() when a filtered mail callback returns a non-bool value. [#66219](https://github.com/woocommerce/woocommerce/pull/66219) = 10.9.2 2026-07-02 = **WooCommerce** * Fix - Prevent update-time fatal errors by guarding new settings SDK classes and preserving the removed legacy settings API controller as a no-op compatibility stub. [#66081](https://github.com/woocommerce/woocommerce/pull/66081) * Update - Enable push notifications by default and deprecate feature flag. [#66088](https://github.com/woocommerce/woocommerce/pull/66088) = 10.9.1 2026-06-24 = **WooCommerce** * Fix - Remove get_entry_count() from the product feed FeedInterface to restore backward compatibility. Requiring the method broke third-party implementations (e.g. older WooCommerce Stripe Gateway versions) that implement the interface without it. The method remains available on JsonFileFeed. [#65972](https://github.com/woocommerce/woocommerce/pull/65972) = 10.9.0 2026-06-23 = **WooCommerce** * Fix - Add defensive validation to order action links in order-details.php template to handle malformed entries from third-party extensions. [#64492](https://github.com/woocommerce/woocommerce/pull/64492) * Fix - Add global HTML translate attribute to currency so it doesn't get auto translated [#62037](https://github.com/woocommerce/woocommerce/pull/62037) * Fix - Add install_plugins capability check to the install-jp-and-wcs-plugins inbox-note action handler so the latent installer call is unreachable to users without the `install_plugins` capability. [#64428](https://github.com/woocommerce/woocommerce/pull/64428) * Fix - Add product type guard to VariationSelectorAttribute block to prevent fatal error when rendered for non-variable products. [#64410](https://github.com/woocommerce/woocommerce/pull/64410) * Fix - Add stock status and product status indicators to the admin order product selector so admins can see which variations are out of stock, on backorder, or disabled. [#64426](https://github.com/woocommerce/woocommerce/pull/64426) * Fix - Add `small` to ALLOWED_TAGS to fix price suffix stripped on variable products. [#64540](https://github.com/woocommerce/woocommerce/pull/64540) * Fix - Adopt 2px border-radius on Woo custom inputs and buttons to align with WP 7.0 [#64417](https://github.com/woocommerce/woocommerce/pull/64417) * Fix - Allow the v4 products endpoint to filter by multiple stock statuses. [#65155](https://github.com/woocommerce/woocommerce/pull/65155) * Fix - Announce order note save success to screen readers when adding a note from the order admin meta box, distinguishing between private notes and customer-emailed notes (WCAG 4.1.3). [#64891](https://github.com/woocommerce/woocommerce/pull/64891) * Fix - Avoid priming transient option caches for variable products when a persistent object cache is active, which prevents unbounded growth of the notoptions cache. [#65440](https://github.com/woocommerce/woocommerce/pull/65440) * Fix - Catalog Sorting block: prevent 404s for non-existent JS and CSS asset files. [#64682](https://github.com/woocommerce/woocommerce/pull/64682) * Fix - Clear store_stock push notification dedup meta when product stock recovers above its threshold so future downward crossings emit a fresh push. [#64727](https://github.com/woocommerce/woocommerce/pull/64727) * Fix - Don't leak title, price, permalink, or image for non-public products (draft, private, password-protected, etc.) in shopper-list responses. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Fix - Drop the outdated "app version needs to be 15.7" helper text from the mobile-app modal QR view and surface the underlying Jetpack error in the magic-link failure notice so support and merchants can diagnose the problem instead of hitting a generic retry message. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Fix - Fix account dropdown button height mismatch with search input in Marketplace header [#64420](https://github.com/woocommerce/woocommerce/pull/64420) * Fix - Fix Add to Cart Button not working on Products (Beta) block [#65525](https://github.com/woocommerce/woocommerce/pull/65525) * Fix - Fix Analytics order stats for lump-sum full refunds (e.g. order status set to Refunded) so net revenue uses product net, not the full refund total. [#64106](https://github.com/woocommerce/woocommerce/pull/64106) * Fix - Fix array to string conversion warning in wc_query_string_form_fields() when URL contains nested query string parameters. [#64010](https://github.com/woocommerce/woocommerce/pull/64010) * Fix - Fix attribute escaping in product gallery dialog images and remove the broken loading attribute so dialog images render eagerly as intended [#64673](https://github.com/woocommerce/woocommerce/pull/64673) * Fix - Fix a typo in the `site_not_connected` installer error code (previously emitted as `site_not_connnected`). WooCommerce.com continues to accept both spellings, so existing sites are unaffected. [#64180](https://github.com/woocommerce/woocommerce/pull/64180) * Fix - Fix BatchProcessingController::enqueue_processor() appending duplicate entries to the wc_pending_batch_processes option. [#65543](https://github.com/woocommerce/woocommerce/pull/65543) * Fix - Fix categories report filtering when term_id differs from term_taxonomy_id [#64548](https://github.com/woocommerce/woocommerce/pull/64548) * Fix - Fix Customers analytics screen failing to render when a customer record contains a country value that collides with an Array index or property name. [#64633](https://github.com/woocommerce/woocommerce/pull/64633) * Fix - Fix handling of array input types in the dual API [#64735](https://github.com/woocommerce/woocommerce/pull/64735) * Fix - Fix highest shipping cost shown before address entry when using Local Pickup with block checkout. Also improves shipping rate selection UX with optimistic UI updates in the order totals. [#64092](https://github.com/woocommerce/woocommerce/pull/64092) * Fix - Fix Interactivity API hydration warning on shopper-collection rows for items without product variations. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Fix - Fix JS TypeError when product excerpt metabox is removed. [#64346](https://github.com/woocommerce/woocommerce/pull/64346) * Fix - Fix locale leak in WC_Email_New_Order::trigger(): restore_locale() was not called when the email was skipped due to already being sent, leaving the locale set for the remainder of the request. [#64859](https://github.com/woocommerce/woocommerce/pull/64859) * Fix - Fix PHP 8.1+ deprecation notice when passing null to preg_match in WC_Eval_Math. [#64158](https://github.com/woocommerce/woocommerce/pull/64158) * Fix - Fix PHP warning for undefined array key fixedWidth in ProductCollection Renderer when using Fixed Width + Carousel [#64432](https://github.com/woocommerce/woocommerce/pull/64432) * Fix - Fix report transient cache key instability caused by DateTime serialization with microseconds in get_cache_key [#64430](https://github.com/woocommerce/woocommerce/pull/64430) * Fix - Fix responsive layout issue on Status admin screen notice buttons [#65298](https://github.com/woocommerce/woocommerce/pull/65298) * Fix - Fix tax rate labels containing percent signs (e.g. "%15 KDV" in Turkish locale) being corrupted when stored on order items. [#64154](https://github.com/woocommerce/woocommerce/pull/64154) * Fix - Fix typo: "recieved" corrected to "received" in code comments and strings. [#64433](https://github.com/woocommerce/woocommerce/pull/64433) * Fix - Fix Variation Selector: Attribute Name colors not being applied in the editor [#65010](https://github.com/woocommerce/woocommerce/pull/65010) * Fix - Fix wc_customer_bought_product() returning false for unlinked guest orders when a matching user ID is supplied. [#65531](https://github.com/woocommerce/woocommerce/pull/65531) * Fix - Fix webhook topic validator accepting `coupon.published`, `customer.published`, `customer.restored`, and `order.published` topics that have no registered hook, causing webhooks to save as Active but never deliver. The validator now derives the default-pair allowlist from the new `WC_Webhook::get_default_topic_hooks()` static, so extensions that register hooks for those pairs via `woocommerce_webhook_topic_hooks` are honored automatically. [#64505](https://github.com/woocommerce/woocommerce/pull/64505) * Fix - Fix `cartItemScreenReaderPrice` filter output being announced by screen readers as separate fragments instead of a single sentence. [#64480](https://github.com/woocommerce/woocommerce/pull/64480) * Fix - Fix `customer_note` query arg being silently ignored when using HPOS order storage. [#64467](https://github.com/woocommerce/woocommerce/pull/64467) * Fix - Hide the WordPress admin footer text on the experimental All Products dashboard. [#64705](https://github.com/woocommerce/woocommerce/pull/64705) * Fix - Honor the configured product count color for the Mini Cart badge on the frontend when using the Interactivity API. [#64411](https://github.com/woocommerce/woocommerce/pull/64411) * Fix - Honor `#[ArrayOf]` on query and mutation return types in the GraphQL API builder [#65235](https://github.com/woocommerce/woocommerce/pull/65235) * Fix - Improve diagnostics for failed analytics order imports. [#64588](https://github.com/woocommerce/woocommerce/pull/64588) * Fix - Keep product dashboard snackbar notices visible above the quick edit drawer. [#65220](https://github.com/woocommerce/woocommerce/pull/65220) * Fix - Keep Store API visual attribute term data opt-in with `__experimental_visual`. [#65432](https://github.com/woocommerce/woocommerce/pull/65432) * Fix - Make the payment provider setup-required error message more actionable. [#64799](https://github.com/woocommerce/woocommerce/pull/64799) * Fix - Preserve deferred transactional email object arguments when queued through Action Scheduler. [#64820](https://github.com/woocommerce/woocommerce/pull/64820) * Fix - Preserve the 'X' check digit in ISBN-10 identifiers entered in the GTIN/UPC/EAN/ISBN product field. The server-side sanitizer, classic editor validation, and block editor input pattern previously stripped or rejected 'X', silently truncating valid ISBN-10s such as 157249042X. [#64889](https://github.com/woocommerce/woocommerce/pull/64889) * Fix - Prevent a `_load_textdomain_just_in_time` notice from firing on every request when the GraphQL API feature is registered. [#64881](https://github.com/woocommerce/woocommerce/pull/64881) * Fix - Prevent the Marketplace product card title focus ring from being clipped. [#64788](https://github.com/woocommerce/woocommerce/pull/64788) * Fix - Product data and Coupon data tabs: restore a visible keyboard focus indicator. The tabs previously suppressed the WordPress core focus ring without providing a replacement, leaving keyboard users without a perceivable indicator (WCAG 2.4.7, 2.4.11, 1.4.1). [#64890](https://github.com/woocommerce/woocommerce/pull/64890) * Fix - Product image tooltip: set aria-label via DOM attribute instead of interpolating the translated string into the HTML template, preventing broken markup when the translation contains characters such as quotes. [#64888](https://github.com/woocommerce/woocommerce/pull/64888) * Fix - Promote the simple-product offer's price and currency to the top of the JSON-LD offer so Google Search Console accepts the structured data. [#65123](https://github.com/woocommerce/woocommerce/pull/65123) * Fix - Re-add the analytics full refund fix tool to Status > Tools, shown only for stores with old refund data. [#64143](https://github.com/woocommerce/woocommerce/pull/64143) * Fix - Relax MCP `outputSchema` published for REST-derived abilities so `structuredContent` validates in MCP clients (Cursor, Claude Desktop): strip `format: date-time` and `format: uri` (WooCommerce REST dates omit timezone and URI fields can be empty), and widen every declared scalar `type` to the full JSON type union plus `null` so fields whose declared type disagrees with the controller's actual response — including ones returned as arrays or objects, like `meta_data[].display_value` — still validate. [#64787](https://github.com/woocommerce/woocommerce/pull/64787) * Fix - Remove duplicate tfoot elements in the My Account order details template. [#64358](https://github.com/woocommerce/woocommerce/pull/64358) * Fix - Remove unnecessary gap in Product Filters block [#64599](https://github.com/woocommerce/woocommerce/pull/64599) * Fix - Replace developer-facing "Plugin API call failed" error with merchant-friendly copy that explains the issue and suggests next steps. [#64186](https://github.com/woocommerce/woocommerce/pull/64186) * Fix - Replace hardcoded /wp-content path with WP_CONTENT_DIR constant. [#64376](https://github.com/woocommerce/woocommerce/pull/64376) * Fix - Set `cartPageHasSavedForLater` from the Shopper Collection block itself so the cart "Save for later" link shows when the block is auto-injected as a hooked block (which `has_block()` does not detect). [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Fix - Shopper Collection: skip rendering and asset enqueue for logged-out shoppers. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Fix - Skip scheduling and sending the customer review-request email when the order has no reviewable items (every product has reviews disabled per-product or site-wide, or every reviewable item is already reviewed for that order). [#64960](https://github.com/woocommerce/woocommerce/pull/64960) * Fix - Stop rendering thumbnail images in inbox notes; deprecate `Note::set_image()`, `Note::get_image()`, `Note::set_layout()`, `Note::get_layout()` and the `'thumbnail'` layout value, all of which will be removed in a future release. [#64443](https://github.com/woocommerce/woocommerce/pull/64443) * Fix - Store API: reuse the session's pending/failed order on checkout POST retry instead of creating a duplicate. Also restore session precedence for `payment_method` in the deferred-draft response so a shopper's PATCH-time selection isn't overwritten by their saved default. [#64806](https://github.com/woocommerce/woocommerce/pull/64806) * Fix - Store fulfillment datetimes as UTC and return them from the REST API as ISO 8601 with an explicit `Z` suffix so they render correctly on non-UTC sites. [#64260](https://github.com/woocommerce/woocommerce/pull/64260) * Fix - Update Featured Product and Featured Category block previews in the inserter so they better match the frontend [#64206](https://github.com/woocommerce/woocommerce/pull/64206) * Fix - Validate product_query before using in WC_Product_Data_Store_CPT. [#64360](https://github.com/woocommerce/woocommerce/pull/64360) * Fix - Push notifications: cancel the safety-net Action Scheduler action on delivery by matching schedule and cancel on a single identity-keyed args shape, so stale actions no longer fire ~60s later (and the retry path can no longer produce duplicate pushes). [#65589](https://github.com/woocommerce/woocommerce/pull/65589) * Fix - Fix product filters not applying when Full Page Reload is enabled in the Product Collection block. [#65601](https://github.com/woocommerce/woocommerce/pull/65601) * Fix - Only save published products to shopper lists. [#65899](https://github.com/woocommerce/woocommerce/pull/65899) * Fix - Fix adding to cart variable products with an 'Any' attribute from the Add to Cart + Options block when in legacy mode [#65934](https://github.com/woocommerce/woocommerce/pull/65934) * Add - Add a "Save for later" link beneath each cart line item that saves the item to the saved-for-later shopper list and removes it from the cart on success. The link is only shown to logged-in users and is hidden in the mini-cart. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Add - Add a configurable endpoint URL to the GraphQL settings section. [#64350](https://github.com/woocommerce/woocommerce/pull/64350) * Add - Add a configurable maximum query depth to the GraphQL settings section. [#64325](https://github.com/woocommerce/woocommerce/pull/64325) * Add - Add after_password_reset action hook for parity with WordPress core. [#64380](https://github.com/woocommerce/woocommerce/pull/64380) * Add - Add a merchant-configurable maximum-rating threshold to the store_review push notification, so only reviews at or below the threshold trigger a notification. Default behaviour (notify on every approved review) is unchanged. [#64565](https://github.com/woocommerce/woocommerce/pull/64565) * Add - Add a merchant-configurable minimum-amount threshold to the store_order push notification, so only orders at or above the threshold trigger a notification. Default behaviour (notify on every enabled order) is unchanged. [#64509](https://github.com/woocommerce/woocommerce/pull/64509) * Add - Add a metadata mechanism to the dual code+GraphQL API [#64800](https://github.com/woocommerce/woocommerce/pull/64800) * Add - Add a native transactional email log. Each send attempt is recorded under WooCommerce → Status → Logs (source: transactional-emails), capturing the type, related order or object, send status, and recipient (WordPress username for registered users, "guest" for unrecognised addresses). Failed sends include the error reason from wp_mail_failed. [#64491](https://github.com/woocommerce/woocommerce/pull/64491) * Add - Add an in-app confirmation flow to the mobile-app QR login: wc-admin polls a new status endpoint while the QR is on screen, transitions to a "Signed in successfully on {device}" panel after the mobile app exchanges the token, exposes an "It wasn't you? Revoke access" button, and adds a persistent "Renew code" button alongside the countdown. The Application Password is now named with the device model and date so the merchant can identify it in Users → Profile → Application Passwords. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Add - Add an opt-in settings UI SDK path for WooCommerce settings pages. [#64387](https://github.com/woocommerce/woocommerce/pull/64387) * Add - Add an order milestone celebration for the 1st, 100th, and 1000th paid orders. [#64679](https://github.com/woocommerce/woocommerce/pull/64679) * Add - Add a number-matching approval step to the mobile-app QR login: after the merchant scans the QR, the mobile app shows a 3-digit number, and wc-admin asks the merchant to tap the matching value from a server-shuffled triple. A wrong tap (or the explicit "I don't recognise this device" cancel link) terminates the session permanently — defending against shoulder-surfed QR codes and leaked screenshots. Older mobile clients without the new capability flag receive 426 Upgrade Required so they can prompt for an app update. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Add - Add a setting to toggle Apollo Automatic Persisted Queries (APQ) caching on the GraphQL settings page. [#64448](https://github.com/woocommerce/woocommerce/pull/64448) * Add - Add a setting to toggle the ObjectCache-backed parsed-query cache on the GraphQL settings page. [#64415](https://github.com/woocommerce/woocommerce/pull/64415) * Add - Add canonical WooCommerce domain abilities for product and order management. [#64606](https://github.com/woocommerce/woocommerce/pull/64606) * Add - Add change-summary REST endpoint and service for surfacing block email template updates. [#64484](https://github.com/woocommerce/woocommerce/pull/64484) * Add - Add configurable parsed query cache TTL to GraphQL settings [#64488](https://github.com/woocommerce/woocommerce/pull/64488) * Add - Add experimental inner block protocols for product filter blocks. [#64585](https://github.com/woocommerce/woocommerce/pull/64585) * Add - Add filters for dual API debug mode and introspection, and surface status resolver failures in debug mode. [#64729](https://github.com/woocommerce/woocommerce/pull/64729) * Add - Add granular type- and field-level authorization to the dual code+GraphQL API [#65235](https://github.com/woocommerce/woocommerce/pull/65235) * Add - Add native variation gallery support: each variation can now have its own ordered image set, replacing the retired Additional Variation Images extension. Includes a migrator for legacy data and a runtime fallback so existing stores keep displaying their galleries. [#64524](https://github.com/woocommerce/woocommerce/pull/64524) * Add - Add OPcache-backed caching for parsed GraphQL queries, with fallback to the WP object cache. [#64596](https://github.com/woocommerce/woocommerce/pull/64596) * Add - Add per-user push notification preferences REST endpoint at `/wc-push-notifications/preferences`. [#64351](https://github.com/woocommerce/woocommerce/pull/64351) * Add - Add QR code login for the WooCommerce mobile app so eligible store managers can sign in directly without a linked WordPress.com account. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Add - Add quick edit and bulk product actions to the experimental products app. [#64481](https://github.com/woocommerce/woocommerce/pull/64481) * Add - Add Review drawer UI for selectively applying block email template updates. [#64497](https://github.com/woocommerce/woocommerce/pull/64497) * Add - Add selective apply + undo REST endpoints for block email template updates. [#64497](https://github.com/woocommerce/woocommerce/pull/64497) * Add - Add Stage 1 of the variations classic redesign: a DataViews-based Variations tab in the classic product editor, behind the product_variations_classic_redesign feature flag (default off). [#64595](https://github.com/woocommerce/woocommerce/pull/64595) * Add - Add Stripe IPP channel check to POS order identification for email suppression. [#64029](https://github.com/woocommerce/woocommerce/pull/64029) * Add - Add the foundation for shopper lists via new Store API endpoints under /wc/store/v1/shopper-lists. Lists are persisted per-user in usermeta. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Add - Add the logic to clear "wc_attribute_taxonomies" transient and cache when clicking on "clear transients". [#64240](https://github.com/woocommerce/woocommerce/pull/64240) * Add - Add the store_stock push notification covering low-stock, out-of-stock, and backorder events. All three events are enabled by default and each one has its own merchant-configurable sub-flag. [#64600](https://github.com/woocommerce/woocommerce/pull/64600) * Add - Add the `order-detail-redesign` feature flag (default off). When enabled, caps the admin Order edit screen at 1200px on wide displays. [#64669](https://github.com/woocommerce/woocommerce/pull/64669) * Add - Add the `woocommerce/add-to-wishlist-button` block: shipped as an inner block of `woocommerce/add-to-cart-with-options` on the single-product template (block themes only). Toggles the currently configured product (parent or selected variation) in the shopper's wishlist via the shared `shopper-lists` iAPI store. Hidden for guests. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Add - Add the `woocommerce/wishlist` block: renders the shopper's wishlist via the shared `shopper-lists` Store API and iAPI store, composes the `ShopperListRenderer` shared row markup, and ships an "Add to cart" per-row action that adds the product to the cart and removes the row from the wishlist on confirmed success. The `/my-account/wishlist/` endpoint now renders this block instead of its placeholder. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Add - Add Tracks instrumentation for the block-email update flow: server-side `_available`, `_applied` (auto + selective), and `_backfill_completed` events, plus list-page `_viewed`. Also stamps the backfill-complete option on fresh installs so the divergence sweep is not permanently dormant. [#64759](https://github.com/woocommerce/woocommerce/pull/64759) * Add - Add Tracks instrumentation to the floating header's Screen Options (gear) and Help (?) icon buttons. Fires `wcadmin_header_meta_icon_click` with `icon` and `action` (open/close) so engagement with these two icons can be measured. [#65131](https://github.com/woocommerce/woocommerce/pull/65131) * Add - Add WC REST API v4 product filters for stock quantity ranges. [#65117](https://github.com/woocommerce/woocommerce/pull/65117) * Add - Add WooCommerce 11.0 removal notices for the deprecated product editor feature, extension APIs, and public PHP classes. [#65333](https://github.com/woocommerce/woocommerce/pull/65333) * Add - Add `can_be_refunded` field to v4 order and line item REST API responses. [#64162](https://github.com/woocommerce/woocommerce/pull/64162) * Add - Add `get_entry_count()` to `FeedInterface` so product feed consumers can report the number of rows actually written to the feed (distinct from the number of products iterated by `ProductWalker`). [#64394](https://github.com/woocommerce/woocommerce/pull/64394) * Add - Allow the shipping zones REST API endpoint to be extended [#64246](https://github.com/woocommerce/woocommerce/pull/64246) * Add - Auto-inject the Shopper Collection block on the cart page when the shopper lists feature is enabled. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Add - Customer Review Request: render one row per line item on the Review Order page so customers can leave distinct reviews for each variation of a variable product they bought, and surface the variation's attribute summary on the parent product's Reviews tab. [#64984](https://github.com/woocommerce/woocommerce/pull/64984) * Add - Filter push notifications by per-user preferences so opted-out merchants don't receive disabled notification types on their devices. [#64487](https://github.com/woocommerce/woocommerce/pull/64487) * Add - Gate shopper lists behind a new experimental flag. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Add - Register a settings entity in the WooCommerce Blocks entities module so admin clients can read store settings via core-data. [#65127](https://github.com/woocommerce/woocommerce/pull/65127) * Add - Send the merchant a transactional email after a successful QR mobile-app sign-in summarizing the device, OS, app version, and timestamp, with a "revoke access" link. Wrapped in a `woocommerce_qr_login_should_send_signin_email` filter so site owners can suppress the send. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Add - Shopper Collection: add a built-in heading inner block (defaults to "Saved for later" at H2). Editable in the block editor. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Add - Shopper Collections: add experimental wishlist support. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Add - Surface update-available indicator in the block email editor (RSM-141) [#64675](https://github.com/woocommerce/woocommerce/pull/64675) * Add - Wire the Shopper Collection (Saved-for-later) block to the shopper-lists Store API via a private iAPI store, with server-side rendering of saved items, optimistic remove, and Move-to-cart for simple products. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Add - Add a settings section registry so extensions can render sections in existing settings tabs with Settings UI. [#65866](https://github.com/woocommerce/woocommerce/pull/65866) * Add - Render the Add to Wishlist Button inside the Add to Cart + Options block as the last child when the (experimental) wishlist feature is enabled, without modifying the shipped template parts. [#65820](https://github.com/woocommerce/woocommerce/pull/65820) * Update - Add readonly variation attributes [#65255](https://github.com/woocommerce/woocommerce/pull/65255) * Update - Add three-way diff for block email template change-summary and selective apply when the new `_wc_email_template_last_core_render` post meta is present. [#64716](https://github.com/woocommerce/woocommerce/pull/64716) * Update - Add to Cart + Options: Variation Selector block now can use the same inner blocks as Product Filters [#64887](https://github.com/woocommerce/woocommerce/pull/64887) * Update - Add tracking for attribute type when updating or saving product attributes [#65228](https://github.com/woocommerce/woocommerce/pull/65228) * Update - DataViews - All Products: add quick edit panel [#64481](https://github.com/woocommerce/woocommerce/pull/64481) * Update - Deprecate Product Editor v2 [#65333](https://github.com/woocommerce/woocommerce/pull/65333) * Update - Don't allow adding multiple Product Filters blocks on the same page or template [#64538](https://github.com/woocommerce/woocommerce/pull/64538) * Update - Hide the cart "Save for later" link when the user is logged out, the `cart_save_for_later` feature is disabled, or the cart page has no `woocommerce/shopper-collection` block. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Update - Move `OrderDetailRedesign` feature class to the `Internal` namespace so it can be removed without breaking backwards compatibility if the feature is not shipped. [#64669](https://github.com/woocommerce/woocommerce/pull/64669) * Update - Refactor Product block to use isPreviewMode flag [#63270](https://github.com/woocommerce/woocommerce/pull/63270) * Update - Remove the task list reminder bar from WooCommerce admin. The Finish setup entry in the activity panel remains as a quieter, non-obstructive alternative. The `woocommerce_task_list_reminder_bar_hidden` option is removed from the wc-admin REST options allowlist, and a one-time migration cleans it up from existing stores. `TaskList::possibly_remove_reminder_bar()` and `TaskList::REMINDER_BAR_HIDDEN_OPTION` are retained as deprecation stubs. [#64353](https://github.com/woocommerce/woocommerce/pull/64353) * Update - Rename 'Select' attribute type to 'Text' in all user-facing strings [#64570](https://github.com/woocommerce/woocommerce/pull/64570) * Update - Rename CartCheckoutUtils::is_overriden_by_custom_template_content() to is_overridden_by_custom_template_content(). The misspelled name is preserved as a deprecated alias for backwards compatibility. [#64461](https://github.com/woocommerce/woocommerce/pull/64461) * Update - Replaces PanelBody with ToolsPanel in the Coming Soon block [#64768](https://github.com/woocommerce/woocommerce/pull/64768) * Update - Require a wc_store_api Nonce header on shopper-lists item writes. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Update - Update admin modal styles to keep them more consistent [#64265](https://github.com/woocommerce/woocommerce/pull/64265) * Update - Update product filter color handling to use block and global styles. [#64586](https://github.com/woocommerce/woocommerce/pull/64586) * Update - Update the WooCommerce ability category description to cover extension abilities. [#64934](https://github.com/woocommerce/woocommerce/pull/64934) * Update - Enable the push notifications feature by default. [#65572](https://github.com/woocommerce/woocommerce/pull/65572) * Update - Add styles for the settings UI number spin control (hide the native spinner, position the +/- buttons). [#65729](https://github.com/woocommerce/woocommerce/pull/65729) * Update - Update settings UI layout to the agreed design values: 720px container width, 16px spacing between stacked fields, and 24px between cards. [#65729](https://github.com/woocommerce/woocommerce/pull/65729) * Update - Rename the settings UI script handle from wc-settings-ui-sdk to wc-settings-ui (never shipped in a release). [#65893](https://github.com/woocommerce/woocommerce/pull/65893) * Dev - Add E2E tests for block email template update propagation. [#64817](https://github.com/woocommerce/woocommerce/pull/64817) * Dev - Add embedded product variation links to the WC REST API v4 products endpoint. [#64566](https://github.com/woocommerce/woocommerce/pull/64566) * Dev - Add extra flexibility to the authentication and authorization stages of the dual code+GraphQL API. [#64647](https://github.com/woocommerce/woocommerce/pull/64647) * Dev - Add extra flexibility to the HTTP status code computation of the dual code+GraphQL API. [#64699](https://github.com/woocommerce/woocommerce/pull/64699) * Dev - Add Interactivity API packages to the WordPress minimum-version dependency catalog. [#65405](https://github.com/woocommerce/woocommerce/pull/65405) * Dev - Address CodeRabbit review feedback on the Back in Stock Notifications alpha and apply small follow-on cleanups: extract email-link action tokens into `EmailActionController` constants, remove the pre-WP-6.8 hasher compatibility shim now that WooCommerce requires WordPress 6.8, delete the in-tree sprint scratch docs (`SPRINT.md`, `CODERABBIT-TRIAGE.md`, `CODERABBIT-TRIAGE-RAW.md`) ahead of merge, and fix the assorted CR-flagged bugs (cancel-action copy-paste, split verification/unsubscribe keys, guard unreadable notifications in retention and privacy erasers, repair admin create-form option tags, correct background-processor operator precedence, rename typo filter, drop unused sprintf arg). [#64329](https://github.com/woocommerce/woocommerce/pull/64329) * Dev - Add unit test coverage for the products and coupons GraphQL API commands. [#65194](https://github.com/woocommerce/woocommerce/pull/65194) * Dev - Add WooPayments onboarding business details regression tests. [#65357](https://github.com/woocommerce/woocommerce/pull/65357) * Dev - Auto-apply the current core block template render to woo_email posts classified as core_updated_uncustomized after a plugin upgrade. Batched via Action Scheduler so the upgrade request is not blocked. Posts edited by the merchant are left untouched. [#64450](https://github.com/woocommerce/woocommerce/pull/64450) * Dev - Bump mockery/mockery dev dependency to ^1.6.10 to silence PHP 8.4 implicit-nullable deprecation warnings emitted on every request when opcache is disabled. [#64873](https://github.com/woocommerce/woocommerce/pull/64873) * Dev - Comment: Add unit tests for the experimental GraphQL infrastructure [#64479](https://github.com/woocommerce/woocommerce/pull/64479) * Dev - Correct @since tags on push notification preference filtering methods introduced in 10.9.0. [#65380](https://github.com/woocommerce/woocommerce/pull/65380) * Dev - Define the `__i18n_text_domain__` identifier used by the email editor package as `"woocommerce"` in the admin and blocks webpack builds so strings continue to extract and translate under the `woocommerce` text domain. [#64356](https://github.com/woocommerce/woocommerce/pull/64356) * Dev - Dev: swap unmaintained Suin PSR-4 sniff for Slevomat to keep PHPCS working on PHP 8.5. [#64875](https://github.com/woocommerce/woocommerce/pull/64875) * Dev - Document new gallery_image_ids field on /wc/v3/products//variations endpoint (added in #64524). [#65290](https://github.com/woocommerce/woocommerce/pull/65290) * Dev - e2e tests: Fix missing baseURL guard in restApi fixture [#65520](https://github.com/woocommerce/woocommerce/pull/65520) * Dev - Export shared payment method icons and `getCommonIconProps` from `@woocommerce/blocks-checkout`. [#64617](https://github.com/woocommerce/woocommerce/pull/64617) * Dev - Extract shared authorize_as_authenticated logic from the push notifications REST controllers into a new AuthorizesPushNotificationRequests trait. [#65380](https://github.com/woocommerce/woocommerce/pull/65380) * Dev - Fix MCP provider test Abilities API registry bootstrap. [#65223](https://github.com/woocommerce/woocommerce/pull/65223) * Dev - Fix PHPUnit assertions for deferred email queue object round trips and Store API checkout failed-payment retries. [#65226](https://github.com/woocommerce/woocommerce/pull/65226) * Dev - Fix typos in code: linkToDescrption, unkown-status, identifer. [#64882](https://github.com/woocommerce/woocommerce/pull/64882) * Dev - Fix typos in comments and docblocks. [#64950](https://github.com/woocommerce/woocommerce/pull/64950) * Dev - fix unit test env setup [#65341](https://github.com/woocommerce/woocommerce/pull/65341) * Dev - Improve payment setup fallback test coverage and translator context. [#64860](https://github.com/woocommerce/woocommerce/pull/64860) * Dev - Monorepo: address circular dependencies surfaced by SWC TDZ. [#64797](https://github.com/woocommerce/woocommerce/pull/64797) * Dev - Move GraphQL infrastructure classes used by autogenerated code out of the `Internal` namespace into `Api\Infrastructure` [#65151](https://github.com/woocommerce/woocommerce/pull/65151) * Dev - Move TypeScript type-checking from the build to a new `lint:lang:types` script. Builds now emit types and JS without type-checking. [#65168](https://github.com/woocommerce/woocommerce/pull/65168) * Dev - Pass ShopperList and ShopperListItem objects directly to their Store API schemas instead of round-tripping through to_array(); no JSON response shape change. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Dev - Product Collection E2E: close the global inserter before choosing a collection so hover previews do not block the placeholder controls. [#65393](https://github.com/woocommerce/woocommerce/pull/65393) * Dev - Reduce variability in payment gateway is_available implementations. [#64386](https://github.com/woocommerce/woocommerce/pull/64386) * Dev - Refresh PHPStan baseline to reflect changes from PR 64406. [#64543](https://github.com/woocommerce/woocommerce/pull/64543) * Dev - Remove Legacy REST API settings section, admin notices, auto-install logic, and UI nudges from WooCommerce core. The Legacy REST API extension continues to work if manually installed. [#64076](https://github.com/woocommerce/woocommerce/pull/64076) * Dev - Remove the stale experimental iAPI runtime feature flag and custom runtime build path. [#65404](https://github.com/woocommerce/woocommerce/pull/65404) * Dev - Remove the unused settings editor package and related feature flag paths. [#65316](https://github.com/woocommerce/woocommerce/pull/65316) * Dev - Saved for Later: split standalone block from the Shopper Collection variation; shared shopper-lists REST + iAPI domain remains reusable for future list-type blocks. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Dev - Saved for Later tests: reset the LegacyProxy `is_cart()` mock in a `finally` block so it can't leak into later tests sharing the same process. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Dev - Shopper lists: extract the shared row markup (image, name, price, remove badge, variation overlay) into a `ShopperListRenderer` helper and a `_shopper-lists/item` SCSS partial. Saved for Later now composes the helper; the same scaffold is what the upcoming Wishlist block will reuse. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Dev - Surface an "Update available" indicator on the email list page that links into the editor with a deep-link review parameter so merchants can see which transactional emails have customizations diverging from the current core template. [#64547](https://github.com/woocommerce/woocommerce/pull/64547) * Dev - Switch `Taxonomy` type imports in product collection taxonomy controls from `@wordpress/core-data/src/entity-types` to the package's public root export. [#65386](https://github.com/woocommerce/woocommerce/pull/65386) * Dev - Trap `wp_safe_redirect()` in `EmailActionControllerTests` so PHPUnit no longer silently halts mid-suite on the Back in Stock Notifications redirect tests. [#65207](https://github.com/woocommerce/woocommerce/pull/65207) * Dev - Updates internal references to REST API documentation. [#64720](https://github.com/woocommerce/woocommerce/pull/64720) * Dev - Use %i placeholder for table name in set_customer_first_order() SQL query. [#64435](https://github.com/woocommerce/woocommerce/pull/64435) * Dev - Wire verification and confirmation emails for the Back in Stock Notifications alpha: dispatch the verify email when double opt-in is required on signup, dispatch the confirmation email on successful verification, add a rate-limited frontend resend endpoint, fix the admin Resend verification button to actually send, and apply standard UTM parameters to all notification email links. [#64348](https://github.com/woocommerce/woocommerce/pull/64348) * Dev - Add a smoke test for the settings UI feature flag off state. [#65575](https://github.com/woocommerce/woocommerce/pull/65575) * Dev - Add NOX onboarding critical-flow documentation and E2E coverage. [#65582](https://github.com/woocommerce/woocommerce/pull/65582) * Dev - Move an inline comment to its own line in wc_customer_bought_product() to satisfy PHPCS (no functional change). [#65590](https://github.com/woocommerce/woocommerce/pull/65590) * Dev - Surface Settings UI fallback through wc_doing_it_wrong. [#65587](https://github.com/woocommerce/woocommerce/pull/65587) * Tweak - Add a new standalone wc-admin page at /mobile-app-login for merchants who already have the Woo mobile app installed and want to sign in via QR code scan. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Tweak - Address security review findings on the Task 7 QR login flow: add a database-backed atomic claim to /qr-login-scan to prevent two concurrent scans from both writing a fresh challenge (the loser's session_id was silently orphaned), bind /qr-login-session-status grant delivery to proof of token knowledge via a required token_hash parameter, and clear the plaintext token from React state once the scan is in. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Tweak - Align embedded admin notice padding with WordPress 7.0. [#64809](https://github.com/woocommerce/woocommerce/pull/64809) * Tweak - Align order preview action button border, radius, and height with WordPress 7.0 secondary button style. [#64354](https://github.com/woocommerce/woocommerce/pull/64354) * Tweak - Align Settings UI SDK embed styling with the settings card design. [#65567](https://github.com/woocommerce/woocommerce/pull/65567) * Tweak - Align Woo admin primary text (#2c3338 → #1e1e1e / $gray-900) and placeholder text (#646970 → #757575 / $gray-700) colors with WordPress 7.0 admin gray scale, using SCSS tokens. [#64280](https://github.com/woocommerce/woocommerce/pull/64280) * Tweak - Always show the QR direct login as the primary path in the mobile app modal, with the WordPress.com magic link available as a secondary CTA when the user has a linked WordPress.com account. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Tweak - Defer focus ring widths to WordPress's --wp-admin-border-width-focus variable so Woo's keyboard focus indicators adopt the density-responsive behavior (2px default, 1.5px retina) that WP core ships. [#64249](https://github.com/woocommerce/woocommerce/pull/64249) * Tweak - Expose the wc-visual attribute type through WooCommerce feature settings instead of the wc-admin beta feature list. [#65169](https://github.com/woocommerce/woocommerce/pull/65169) * Tweak - Fix misspelled words in data-stores.md ("hydates" → "hydrates") and style-guide.md ("understable" → "understandable"). [#64230](https://github.com/woocommerce/woocommerce/pull/64230) * Tweak - Improve the error shown on the QR mobile-app login screen when application passwords are disabled: drop the "ask a site administrator" copy (the merchant hitting this flow is already an admin or shop manager) and replace it with an inline link to the WordPress application-passwords documentation so they can figure out which constant or plugin disabled them. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Tweak - Left-align the QR number-match cancel row and the modal FAQ paragraph so they match the rest of the "Sign into the app" step content. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Tweak - Link the meta box border-radius bridge CSS to its upstream Trac ticket so future maintainers know when to remove it. [#64454](https://github.com/woocommerce/woocommerce/pull/64454) * Tweak - Log mailer failures from the QR sign-in notification email via `wc_get_logger()` instead of swallowing the exception silently, so a misconfigured mailer is observable rather than invisible. The exchange response is still never blocked by mail delivery. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Tweak - Move logic to init chips colors to the Chips inner block [#64887](https://github.com/woocommerce/woocommerce/pull/64887) * Tweak - Order notes meta box: clarify note visibility (visibility label, dynamic CTA, customer-note header, email template link, customer-note delete confirmation) and modernize bubble styling for WP admin alignment. [#64476](https://github.com/woocommerce/woocommerce/pull/64476) * Tweak - Polish the floating WC Admin header across Home and Settings: store icon for View store / Preview store, even icon spacing, fix the user-options click race, align title typography / colour / padding to WordPress design tokens, and remove a bunch of one-off overrides that were drifting from the rest of the wp-admin chrome. [#64885](https://github.com/woocommerce/woocommerce/pull/64885) * Tweak - Polish the QR number-match cancel control: replace the single red link with a row that pairs descriptive text ("I don't recognise this device") with a secondary "Cancel login" button, and re-center the tile row so it visually aligns with the heading on both modal and standalone surfaces. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Tweak - Prevent widows in store alerts message body copy with text-wrap: pretty. [#64453](https://github.com/woocommerce/woocommerce/pull/64453) * Tweak - Promote the post-sign-in confirmation to a third step in the mobile-app modal flow. Once the QR code is exchanged the modal advances past the magic-link section and FAQ to a dedicated "Signed in successfully" step with a larger heading, the device summary, and a primary "Revoke access" button that opens a confirmation dialog before deleting the Application Password. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Tweak - Refresh the floating WC Admin header to consolidate Screen options, Help, Activity, and Finish setup into a single icon-only tab group, removing the duplicate page title that previously appeared on top of wp-admin's own H1 on classic admin screens. [#64643](https://github.com/woocommerce/woocommerce/pull/64643) * Tweak - Remove Facebook for WooCommerce from the onboarding wizard plugin rotation. [#64562](https://github.com/woocommerce/woocommerce/pull/64562) * Tweak - Remove the disabled product editor template system feature flag. [#65387](https://github.com/woocommerce/woocommerce/pull/65387) * Tweak - Remove the disabled product pre-publish modal feature flag. [#65383](https://github.com/woocommerce/woocommerce/pull/65383) * Tweak - Remove the obsolete 'Product reviews have moved!' notice from the Comments screen. [#65110](https://github.com/woocommerce/woocommerce/pull/65110) * Tweak - Reorder Product Data tabs to put Variations above Attributes when the product variations classic redesign feature is enabled. [#65108](https://github.com/woocommerce/woocommerce/pull/65108) * Tweak - Replace hardcoded admin blue colors with WP admin theme color CSS custom properties so Woo inherits the active color scheme [#64196](https://github.com/woocommerce/woocommerce/pull/64196) * Tweak - Shopper Collection: declare the atomic product-image, product-price and product-button stylesheets as style dependencies so their CSS is enqueued on the frontend whenever the block renders, instead of relying on duplicated/missing rules. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Tweak - Shopper Collection: drop the redundant editor stylesheet and rely on the frontend one for both the editor and the frontend. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Tweak - Shopper Collection: hide the empty-state message until items have appeared in the list during the current page session. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Tweak - Shopper Collection: own the grid layout (custom `columnCount` attribute + `.columns-N` class) and ship Product-Collection-equivalent responsive behavior. Items now reflow to fewer columns on narrow viewports instead of shrinking uniformly. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Tweak - Shopper Collection: surface mutation errors via the store-notices banner instead of an in-list error row, and disable the affected row's controls while the request is in flight. [#65263](https://github.com/woocommerce/woocommerce/pull/65263) * Tweak - Show a clearer, actionable message when a plugin install fails during the upgrader step. [#64397](https://github.com/woocommerce/woocommerce/pull/64397) * Tweak - Show parent gallery extras alongside single-image variations in the Product Gallery block. [#65465](https://github.com/woocommerce/woocommerce/pull/65465) * Tweak - Tokenize hardcoded grays across Woo admin React client. Remove redundant onboarding checkbox and text input border overrides (inherit Gutenberg's WP 7.0 defaults for unchecked, checked, and focused states), darken marketplace promo text for improved readability, and tokenize remaining scattered gray hexes. [#64276](https://github.com/woocommerce/woocommerce/pull/64276) * Tweak - Update destructive action link color on API Keys and Webhooks settings pages to match WordPress 7.0's updated error red. [#64203](https://github.com/woocommerce/woocommerce/pull/64203) * Tweak - Update destructive action link color on Shipping Zone, Shipping Class, Shipping Method, and Shipping Provider list tables to match WordPress 7.0's updated destructive red. [#64204](https://github.com/woocommerce/woocommerce/pull/64204) * Tweak - Update the useQRLoginToken admin hook to handle the capability-based permission errors surfaced by the mobile-app QR login endpoint. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Tweak - Use the NOTICE log level (instead of INFO) for transactional email entries with status `disabled` or `skipped`, so admins can distinguish "normal but significant" non-send outcomes from routine successful sends. [#64859](https://github.com/woocommerce/woocommerce/pull/64859) * Performance - Enhance the efficiency and reliability of stock reservation processes during checkout. [#64475](https://github.com/woocommerce/woocommerce/pull/64475) * Performance - Improve order edit page performance by resolving milestone easter egg orders with a bounded HPOS ID query instead of hydrating order objects. [#65258](https://github.com/woocommerce/woocommerce/pull/65258) * Performance - Optimized the order and customer save workflows during checkout using StoreAPI. [#64392](https://github.com/woocommerce/woocommerce/pull/64392) * Performance - Optimize slow SQL and high CPU usage by DB in product filter utility. [#65119](https://github.com/woocommerce/woocommerce/pull/65119) * Performance - Reduce database queries when listing product categories or brands via REST, and when rendering the Product Categories List block with images, by priming thumbnail attachment caches. [#65320](https://github.com/woocommerce/woocommerce/pull/65320) * Performance - Reduce database queries when listing product variations and products via the REST API by priming attachment post caches before iterating over images. [#65271](https://github.com/woocommerce/woocommerce/pull/65271) * Performance - Reduced the frequency of wc_get_product and wc_get_order calls during checkout to improve performance. [#64418](https://github.com/woocommerce/woocommerce/pull/64418) * Performance - Reduced the number of SQL queries on the shop, cart, and checkout pages in the store, as well as on the products page in the admin area, by adding missing cache priming. [#65276](https://github.com/woocommerce/woocommerce/pull/65276) * Performance - Review and optimize the SQL queries used in product filters to improve performance. [#65141](https://github.com/woocommerce/woocommerce/pull/65141) * Performance - Updated order line item product caching to leverage the product object caching feature. [#65508](https://github.com/woocommerce/woocommerce/pull/65508) * Enhancement - Add ariaLabel to attribute, status, and taxonomy product filter items for improved screen reader accessibility [#64693](https://github.com/woocommerce/woocommerce/pull/64693) * Enhancement - Better UX when WooCommerce mobile-app sign-in is unavailable because application passwords are disabled. wc-admin now probes a new `/qr-login-availability` REST endpoint up-front and renders a permanently-disabled card (with a "Why am I seeing this?" expander listing typical causes) instead of optimistically mounting the QR component, spinning, and only then showing a generic error. The structural `application_passwords_unavailable` ERROR-state suppresses the "Try again" retry button since retrying cannot change the site's AP configuration. [#65111](https://github.com/woocommerce/woocommerce/pull/65111) * Enhancement - Email Logger: add a private order note for every transactional email send or failure tied to a WC_Order, making the event visible directly on the order admin page. [#65247](https://github.com/woocommerce/woocommerce/pull/65247) * Enhancement - Migrate the Catalog Sorting block to use Interactivity API [#62854](https://github.com/woocommerce/woocommerce/pull/62854) * Enhancement - Store API: defer checkout draft order creation to place-order time, eliminating orphaned `wc-checkout-draft` rows from page views and form interactions. Adds `woocommerce_store_api_checkout_update_draft` action for PATCH-time observation and `woocommerce_store_api_checkout_order_created` action when the order is first materialised. [#64155](https://github.com/woocommerce/woocommerce/pull/64155) * Enhancement - Track transactional email outcomes: log when emails are disabled (is_enabled() false) or skipped (no recipient) in addition to the existing send-attempt logging. Adds a defensive instanceof guard in WC_Email_New_Order::trigger() before updating order meta on a successful send. [#64859](https://github.com/woocommerce/woocommerce/pull/64859) * Enhancement - Use the customer's first name (billing first name, falling back to WordPress first name, then username) in the greeting of the new account and reset password emails. [#65270](https://github.com/woocommerce/woocommerce/pull/65270) = 10.8.1 2026-05-27 = **WooCommerce** * Fix - Fix a fatal error during in-place upgrade to 10.8.0 caused by the new DefaultCustomerAddress enum being referenced from class-wc-settings-general.php before the in-process autoloader classmap is refreshed. [#65359](https://github.com/woocommerce/woocommerce/pull/65359) * Fix - Fix WooPayments onboarding business type dropdown crash. [#65345](https://github.com/woocommerce/woocommerce/pull/65345) = 10.8.0 2026-05-26 = **WooCommerce** * Fix - Add periodic cleanup for place-order debug log files and dangling order meta that the existing batch processor doesn't cover. [#63756](https://github.com/woocommerce/woocommerce/pull/63756) * Fix - Adds a fallback path to the plugin file during plugin activation step. Prevents `unknown_filename` error when trying to activate a plugin during the auto-installation flow. [#63796](https://github.com/woocommerce/woocommerce/pull/63796) * Fix - Add __next40pxDefaultSize prop to SelectControl components to resolve deprecated size warning on WP 7.0+. [#63847](https://github.com/woocommerce/woocommerce/pull/63847) * Fix - Add __nextHasNoMarginBottom prop to dashboard-charts interval SelectControl to resolve deprecation warning. [#63843](https://github.com/woocommerce/woocommerce/pull/63843) * Fix - Clarify tax inclusion/exclusion in Orders REST API schema descriptions and add total_tax field to inline refund data. [#63692](https://github.com/woocommerce/woocommerce/pull/63692) * Fix - Customer Account: visual fixes of newly added dropdown [#64073](https://github.com/woocommerce/woocommerce/pull/64073) * Fix - Do not update theme support option or queue rewrite rule flush when running in WP-CLI or cron contexts, preventing hosts that run WP-CLI with --skip-themes from corrupting the shop page rewrite rules. [#64117](https://github.com/woocommerce/woocommerce/pull/64117) * Fix - Ensure value attribute is updated when selecting autocomplete address [#63524](https://github.com/woocommerce/woocommerce/pull/63524) * Fix - Fix 404 requests for category-title and category-description block frontend scripts [#63945](https://github.com/woocommerce/woocommerce/pull/63945) * Fix - Fix: missing handling for null meta keys/values in POST/PUT endpoints [#63971](https://github.com/woocommerce/woocommerce/pull/63971) * Fix - Fix account password field showing validation error immediately when "Create an account" checkbox is checked on checkout. [#64064](https://github.com/woocommerce/woocommerce/pull/64064) * Fix - Fix address autocomplete branding logo not rendering in block checkout due to sanitizeHTML stripping img tags [#63985](https://github.com/woocommerce/woocommerce/pull/63985) * Fix - Fix address autocomplete dropdown appearing after browser autofill on checkout [#63902](https://github.com/woocommerce/woocommerce/pull/63902) * Fix - Fix Add to Cart + Options grouped product child quantity inputs to respect each child product's own constraints on WordPress 6.8 [#64571](https://github.com/woocommerce/woocommerce/pull/64571) * Fix - Fix a `_load_textdomain_just_in_time` notice for the `woocommerce` domain on WordPress 6.7+ caused by the new dual code / GraphQL API checking its feature flag too early during plugin load. [#64332](https://github.com/woocommerce/woocommerce/pull/64332) * Fix - Fix Cart/Checkout blocks not displaying product images with non-ASCII filenames. [#63763](https://github.com/woocommerce/woocommerce/pull/63763) * Fix - Fix Cart and Checkout block crash caused by WordPress emoji detection script corrupting React DOM when product names contain emoji characters. [#64072](https://github.com/woocommerce/woocommerce/pull/64072) * Fix - Fix colour picker swatch height to match WP 7.0 input height on Emails settings tab. [#63814](https://github.com/woocommerce/woocommerce/pull/63814) * Fix - Fix command palette command registration on WooCommerce admin pages by loading the command scripts in admin and preserving settings/analytics command hydration. [#64164](https://github.com/woocommerce/woocommerce/pull/64164) * Fix - Fix core profiler shipping_partner_impression tracking event reporting wrong country when plugins step is reached via direct navigation or page refresh. [#64133](https://github.com/woocommerce/woocommerce/pull/64133) * Fix - Fix Coupon Code block search to include coupons in all default statuses (draft, future, pending, private, publish), not just published ones [#63933](https://github.com/woocommerce/woocommerce/pull/63933) * Fix - Fix customer history "Total orders" tooltip to dynamically reflect excluded order statuses instead of using hardcoded text. [#64036](https://github.com/woocommerce/woocommerce/pull/64036) * Fix - Fix CustomerHistory metabox to query real-time order data (HPOS) instead of analytics tables, ensuring accurate customer order count and spend data regardless of analytics sync status. [#63715](https://github.com/woocommerce/woocommerce/pull/63715) * Fix - Fix DB update admin note not reappearing after being dismissed by the user. [#63657](https://github.com/woocommerce/woocommerce/pull/63657) * Fix - Fix duplicate wc_customer_lookup rows when a guest registers via delayed account creation on the order confirmation page. [#63989](https://github.com/woocommerce/woocommerce/pull/63989) * Fix - Fixed a fatal error where urldecode() received an array in wc_product_canonical_redirect() when running on PHP 8 or higher. [#63723](https://github.com/woocommerce/woocommerce/pull/63723) * Fix - Fixed featured products not showing on multisite. [#63204](https://github.com/woocommerce/woocommerce/pull/63204) * Fix - Fix email editor styling regressions: logo/title font competition, inconsistent bold in order totals, and incorrect content indentation in block emails. [#63974](https://github.com/woocommerce/woocommerce/pull/63974) * Fix - Fixes "Additional Information" tab content being cut off on mobile devices. [#63255](https://github.com/woocommerce/woocommerce/pull/63255) * Fix - Fix excessive express payment button spacing in Safari on the block cart page by switching from block layout to flexbox with explicit gap. [#64074](https://github.com/woocommerce/woocommerce/pull/64074) * Fix - Fix fatal error on shop page when a product attribute taxonomy used in Product Filters block is deleted. [#63982](https://github.com/woocommerce/woocommerce/pull/63982) * Fix - Fix fatal TypeError when Product Collection block offset or perPage is an empty string. [#64012](https://github.com/woocommerce/woocommerce/pull/64012) * Fix - Fix Hidden product search visibility [#63181](https://github.com/woocommerce/woocommerce/pull/63181) * Fix - Fix HPOS data cache cross-bleed between order data store subclasses [#64067](https://github.com/woocommerce/woocommerce/pull/64067) * Fix - Fix insufficient color contrast for Select2 placeholder text to meet WCAG 2.2 AA requirements. [#63751](https://github.com/woocommerce/woocommerce/pull/63751) * Fix - Fix is_checkout/is_cart cache poisoning causing 404 on checkout endpoints when called before main query is ready [#63966](https://github.com/woocommerce/woocommerce/pull/63966) * Fix - Fix locale filter breaking address forms when hiding fields. Country is now enforced as always visible and required since it is the lookup key for locale resolution. Also fixes state field not being hideable by locale in classic checkout, and fixes address card displaying stale values for hidden fields. [#63928](https://github.com/woocommerce/woocommerce/pull/63928) * Fix - Fix logo image inheriting unintended margin-right from global img rule in improved email design. [#64137](https://github.com/woocommerce/woocommerce/pull/64137) * Fix - Fix Mini-cart does not update or open when adding through legacy events [#64152](https://github.com/woocommerce/woocommerce/pull/64152) * Fix - Fix moment-timezone console errors in WooCommerce Admin by using WordPress core's bundled moment-timezone instead of a stripped copy [#64201](https://github.com/woocommerce/woocommerce/pull/64201) * Fix - Fix Product Results Count block not updating when filtering products with the Interactivity API. [#63969](https://github.com/woocommerce/woocommerce/pull/63969) * Fix - Fix Product SKU not visible for variable products inside Product Collections [#63990](https://github.com/woocommerce/woocommerce/pull/63990) * Fix - Fix Product Summary "Upgrade now (just this block)" button not working in the Site Editor. [#63937](https://github.com/woocommerce/woocommerce/pull/63937) * Fix - Fix product title with $ breaking Add to cart with options [#63653](https://github.com/woocommerce/woocommerce/pull/63653) * Fix - Fix RTL text alignment in email order details table headers by replacing inline styles with RTL-aware CSS classes. [#63921](https://github.com/woocommerce/woocommerce/pull/63921) * Fix - Fix scheduled import preference lost after analytics option rename in 10.5.0. [#63808](https://github.com/woocommerce/woocommerce/pull/63808) * Fix - Fix scheduled sale actions leaving lookup table data stale [#63856](https://github.com/woocommerce/woocommerce/pull/63856) * Fix - Fix setup wizard TypeError on first site load by reading site title from wcSettings instead of core-data entity record. [#63929](https://github.com/woocommerce/woocommerce/pull/63929) * Fix - Fix some input misalignment in Settings on WP 7.0 [#64145](https://github.com/woocommerce/woocommerce/pull/64145) * Fix - Fix SQL error when searching with empty or exclusion-only terms by falling back to default ordering instead of relevance. [#63760](https://github.com/woocommerce/woocommerce/pull/63760) * Fix - Fix Store API products endpoint allowing transient bloat via arbitrary product IDs in the `related` query parameter. [#63846](https://github.com/woocommerce/woocommerce/pull/63846) * Fix - Fix two typos in available-slot-fills.md — remove duplicate word and correct wrong article. [#64228](https://github.com/woocommerce/woocommerce/pull/64228) * Fix - Fix unauthenticated access to guest order fulfillments via REST API. [#64130](https://github.com/woocommerce/woocommerce/pull/64130) * Fix - Fix validation error message overlapping the advanced cost help text in Flat Rate shipping method settings. [#63398](https://github.com/woocommerce/woocommerce/pull/63398) * Fix - Inherit font color in Checkout block saved addresses [#64148](https://github.com/woocommerce/woocommerce/pull/64148) * Fix - Log get_order() exceptions to WC Logger for easier debugging. [#64347](https://github.com/woocommerce/woocommerce/pull/64347) * Fix - My Account: navigation items have unified padding [#63769](https://github.com/woocommerce/woocommerce/pull/63769) * Fix - Normalise filter query vars before hashing cache keys so equivalent filter combinations (e.g. filter_color=red,blue vs blue,red) share the same cache entry. [#64041](https://github.com/woocommerce/woocommerce/pull/64041) * Fix - Only add valueAddedTaxIncluded to structured data when taxes are enabled (#63266) [#63304](https://github.com/woocommerce/woocommerce/pull/63304) * Fix - Pass `tested` and `icons` fields from WooCommerce.com update-check API response into the `update_plugins` site transient, allowing WordPress to display compatibility info and extension icons on the Updates page. [#63986](https://github.com/woocommerce/woocommerce/pull/63986) * Fix - Prevent a fatal error in the cart template when a filter on `woocommerce_cart_item_product` returns a non-product value, by moving the product name lookup inside the existing product validity check. [#64252](https://github.com/woocommerce/woocommerce/pull/64252) * Fix - Prevent empty quantity output markers in order email templates. [#63878](https://github.com/woocommerce/woocommerce/pull/63878) * Fix - Prevent fatal errors in email footer placeholder replacement when third-party filters return non-string values. [#64056](https://github.com/woocommerce/woocommerce/pull/64056) * Fix - Prevent fatal error when product attribute data is malformed [#63953](https://github.com/woocommerce/woocommerce/pull/63953) * Fix - Remove confusing error notice when shipping tour completion flag fails to save. [#64466](https://github.com/woocommerce/woocommerce/pull/64466) * Fix - REST API: prevent PUT /wc/v(2|3)/orders/{id} from converting non-shop_order records into orders. [#64050](https://github.com/woocommerce/woocommerce/pull/64050) * Fix - Restore case-insensitive coupon lookups on databases with case-sensitive collations. [#63800](https://github.com/woocommerce/woocommerce/pull/63800) * Fix - Restore the Shipping task on US, CO, and MX stores by adding them back to the home-screen auto-zone whitelist. [#64560](https://github.com/woocommerce/woocommerce/pull/64560) * Fix - Schedule sale events when sale date meta is written directly, so sales activate on time for importers and integrations that bypass WooCommerce CRUD. [#64140](https://github.com/woocommerce/woocommerce/pull/64140) * Fix - Skip unnecessary DELETE queries in update_line_items_from_cart when order ID is 0. [#63890](https://github.com/woocommerce/woocommerce/pull/63890) * Fix - Store Notices: Remove margins from empty Store Notices container [#63749](https://github.com/woocommerce/woocommerce/pull/63749) * Fix - Strip sensitive fields (downloads, COGS, purchase note) from V4 products REST API response for users without product management capabilities. [#63895](https://github.com/woocommerce/woocommerce/pull/63895) * Fix - Suppress harmless duplicate key database errors logged during WooCommerce table creation on update. [#64188](https://github.com/woocommerce/woocommerce/pull/64188) * Fix - Use default cursor in Product Gallery large image when it's not clickable [#63956](https://github.com/woocommerce/woocommerce/pull/63956) * Fix - Add row layout data to the WooCommerce Shipping partner suggestion so the card renders correctly in row / vertical placements. [#64593](https://github.com/woocommerce/woocommerce/pull/64593) * Fix - Fix PHP 8.5 fatal error when unsetting string offsets in StoreApi AbstractSchema [#64670](https://github.com/woocommerce/woocommerce/pull/64670) * Fix - Prevent re-entrant order reads triggered by cached refund objects. [#64657](https://github.com/woocommerce/woocommerce/pull/64657) * Fix - Revert PR 62843 which added checkout evidence validation to WC_Order::payment_complete() [#64687](https://github.com/woocommerce/woocommerce/pull/64687) * Fix - Cancel the delayed Customer Review Request email when the order leaves `completed` for any status, and refuse to send if the order is no longer in an eligible status at trigger time. [#64786](https://github.com/woocommerce/woocommerce/pull/64786) * Fix - Fix Add to Cart + Options steppers not working on extension quantity inputs [#64847](https://github.com/woocommerce/woocommerce/pull/64847) * Fix - Prevent invalid cache prefixes from causing fatal errors on the My Account orders page. [#64870](https://github.com/woocommerce/woocommerce/pull/64870) * Fix - Restore the meta_value column to the meta_key_value index on the wc_orders_meta table to fix a performance regression. [#65162](https://github.com/woocommerce/woocommerce/pull/65162) * Add - Add a GraphQL settings section under Advanced with a toggle for the GET endpoint. [#64293](https://github.com/woocommerce/woocommerce/pull/64293) * Add - Add an offline banner to WooCommerce admin that appears when the browser loses its connection, and surface a clear notice when save requests fail silently due to network loss. [#64334](https://github.com/woocommerce/woocommerce/pull/64334) * Add - Add auto-generation mode to the coupon code email block, allowing users to configure coupon rules that generate unique codes at send time. [#64342](https://github.com/woocommerce/woocommerce/pull/64342) * Add - Add optional customer note field to fulfillment updated email notification. [#63855](https://github.com/woocommerce/woocommerce/pull/63855) * Add - Add woocommerce_email_order_details_heading and woocommerce_email_display_order_number filters to the email order details template. [#63898](https://github.com/woocommerce/woocommerce/pull/63898) * Add - Export Skeleton component via PaymentMethodInterface components prop for payment gateway extensions. [#63788](https://github.com/woocommerce/woocommerce/pull/63788) * Add - Introduce the dual code + GraphQL API for WooCommerce [#63772](https://github.com/woocommerce/woocommerce/pull/63772) * Add - Add a new "Review request" transactional email that invites customers to review the products they purchased. Disabled by default and configurable under WooCommerce → Settings → Emails. [#64624](https://github.com/woocommerce/woocommerce/pull/64624) * Add - Add a `/review-order/{id}/?key={order_key}` URL and a tokenized, read-only landing page for the Customer Review Request feature, plus the public `wc_get_review_order_url()` helper. The page is read-only; form controls land in a follow-up. [#64628](https://github.com/woocommerce/woocommerce/pull/64628) * Add - Add the accessible 5-star rating control used by the Review Order page. Native radio inputs with keyboard navigation (arrows, Home, End), dynamic caption, and visible focus ring; filterable labels via `woocommerce_review_order_rating_labels`. [#64689](https://github.com/woocommerce/woocommerce/pull/64689) * Add - Add the accessible 5-star rating control used by the Review Order page. Native radio inputs with keyboard navigation (arrows, Home, End), dynamic caption, and visible focus ring; filterable labels via `woocommerce_review_order_rating_labels`. [#64701](https://github.com/woocommerce/woocommerce/pull/64701) * Add - Add the per-item review form row on the Review Order page: linked product title, thumbnail, accessible star rating, review textarea, and an extensions hook (`woocommerce_review_order_form_fields`). Submit button is gated on at least one rating being selected. Narrow-viewport layout stacks the row vertically below 600px. [#64701](https://github.com/woocommerce/woocommerce/pull/64701) * Add - Schedule the Review request email via Action Scheduler so it fires automatically a configurable number of days after an order is completed, and cancel the pending send when the order is cancelled, refunded, trashed or deleted. [#64625](https://github.com/woocommerce/woocommerce/pull/64625) * Add - Add the AJAX submission handler that turns the Review Order form into product reviews — one verified-buyer comment per rated row, per-row outcome, `comment_moderation` honoured. [#64805](https://github.com/woocommerce/woocommerce/pull/64805) * Add - Exclude fully-refunded line items from the customer Review Order page so customers can't review products they no longer own. [#64840](https://github.com/woocommerce/woocommerce/pull/64840) * Add - Pre-fill the Review Order form with the customer's existing review for this order, scoped per-order so repeat purchases of the same product get a fresh empty row. [#64832](https://github.com/woocommerce/woocommerce/pull/64832) * Add - Render an empty-state thank-you view on the customer Review Order page when no actionable rows remain (every eligible item is already reviewed or skipped because reviews are disabled). [#64840](https://github.com/woocommerce/woocommerce/pull/64840) * Update - Add a woocommerce/product-context iAPI store for use in Add to Cart with Options [#63208](https://github.com/woocommerce/woocommerce/pull/63208) * Update - Add to Cart Button: open external products link in a new tab [#63970](https://github.com/woocommerce/woocommerce/pull/63970) * Update - Bump @wordpress/* dependencies to the wp-6.8 minimum across the admin, blocks, email-editor, product-editor, and settings-editor packages. [#64114](https://github.com/woocommerce/woocommerce/pull/64114) * Update - Exclude checkout-draft orders from default REST API order queries (status=any). API consumers that rely on checkout-draft orders appearing in unfiltered order listings will need to explicitly request them via `status=checkout-draft`. [#63743](https://github.com/woocommerce/woocommerce/pull/63743) * Update - Improve messages in the Reviews Form block when users can't leave reviews [#64004](https://github.com/woocommerce/woocommerce/pull/64004) * Update - Internalize the webonyx GraphQL package [#64317](https://github.com/woocommerce/woocommerce/pull/64317) * Update - Introduce new 'Create value' modal in variable product editor [#64251](https://github.com/woocommerce/woocommerce/pull/64251) * Update - Make the GraphQL engine externally usable [#64390](https://github.com/woocommerce/woocommerce/pull/64390) * Update - Migrate all interactive blocks from the old `woocommerce/product-data` store to the new `woocommerce/products` store. [#63662](https://github.com/woocommerce/woocommerce/pull/63662) * Update - Migrate deferred transactional email sending to Action Scheduler [#63832](https://github.com/woocommerce/woocommerce/pull/63832) * Update - Modify the meta_key_value in wp_wc_orders_meta to only track the meta_key column [#63897](https://github.com/woocommerce/woocommerce/pull/63897) * Update - Replace 'Return to Cart' link with a cart icon in the checkout header [#63678](https://github.com/woocommerce/woocommerce/pull/63678) * Update - Shorten the email editor reset action label from "Reset content to default" to "Reset" for consistency with site template resets and to reduce i18n overhead. [#63828](https://github.com/woocommerce/woocommerce/pull/63828) * Update - Update copy on the activate payments step in NOX [#63919](https://github.com/woocommerce/woocommerce/pull/63919) * Update - Show all country-relevant shipping partner recommendations on the settings page even when one of the partners is already installed. [#64629](https://github.com/woocommerce/woocommerce/pull/64629) * Update - Stamp the new `_wc_email_template_last_core_render` and `_wc_email_backfilled` post meta during email template sync so 10.9's three-way diff change-summary has a base reference on 10.8-era posts. [#64728](https://github.com/woocommerce/woocommerce/pull/64728) * Update - Update version requirements to WordPress 6.9. [#65211](https://github.com/woocommerce/woocommerce/pull/65211) * Dev - Add internal WCEmailTemplateSyncRegistry helper that resolves block email templates participating in template update propagation via their @version header. No runtime behaviour change yet. [#64261](https://github.com/woocommerce/woocommerce/pull/64261) * Dev - Add server-side POST /woocommerce-email-editor/v1/emails/{id}/reset endpoint that atomically rewrites a woo_email post to its current core template render and stamps sync meta (version, source hash, synced-at, status=in_sync). [#64355](https://github.com/woocommerce/woocommerce/pull/64355) * Dev - Backfill template sync metadata onto pre-existing block email posts during upgrade so the divergence detector can classify legacy installs safely. [#64364](https://github.com/woocommerce/woocommerce/pull/64364) * Dev - Detect divergence between generated block email posts and their source templates after plugin updates, classifying each post as in-sync, core-updated-uncustomized, or core-updated-customized. [#64328](https://github.com/woocommerce/woocommerce/pull/64328) * Dev - Fix workflow path filters to correctly re-run when workflow files change. [#63935](https://github.com/woocommerce/woocommerce/pull/63935) * Dev - Improve repeated WooCommerce admin and blocks production builds by using webpack filesystem cache outside watch mode. [#64080](https://github.com/woocommerce/woocommerce/pull/64080) * Dev - Introduce a new performance skill focused on effectively using option cache priming APIs. [#63720](https://github.com/woocommerce/woocommerce/pull/63720) * Dev - Introduces and implements constants for default customer address options in the WooCommerce plugin codebase. [#64091](https://github.com/woocommerce/woocommerce/pull/64091) * Dev - Introduces and implements constants for order item types in the WooCommerce plugin codebase. [#63863](https://github.com/woocommerce/woocommerce/pull/63863) * Dev - Introduces and implements constants for tax based on options in the WooCommerce plugin codebase. [#64104](https://github.com/woocommerce/woocommerce/pull/64104) * Dev - Monorepo: complete migration to @woocommerce/internal-style-build/webpack-rtl-plugin [#64161](https://github.com/woocommerce/woocommerce/pull/64161) * Dev - Monorepo: refresh DependencyExtractionWebpackPlugin for compatibility with filesystem cache, admin build cleanup. [#64111](https://github.com/woocommerce/woocommerce/pull/64111) * Dev - QAO-185: add bridge aggregator for blocks e2e migration. [#64179](https://github.com/woocommerce/woocommerce/pull/64179) * Dev - Reduce WooCommerce Blocks non-production build time by using a single Terser compression pass outside production. [#64081](https://github.com/woocommerce/woocommerce/pull/64081) * Dev - Remove the search personal skills part from AGENTS.md [#63900](https://github.com/woocommerce/woocommerce/pull/63900) * Dev - Replaced patched `@wordpress/data` types with opt-in internal package types. [#63483](https://github.com/woocommerce/woocommerce/pull/63483) * Dev - Skip unnecessary extension suggestion lookup for offline payment methods in enhance_payment_gateway_details(). [#63930](https://github.com/woocommerce/woocommerce/pull/63930) * Dev - Stamp sync meta on generated block email posts (version, source hash, synced-at) for emails whose templates expose a parseable @version header. No runtime behaviour change for emails outside the sync registry. [#64287](https://github.com/woocommerce/woocommerce/pull/64287) * Dev - Update webpack configuration [#64250](https://github.com/woocommerce/woocommerce/pull/64250) * Dev - Upgrade pnpm from 9.15.0 to 10.33.0 with supply chain security settings. [#63964](https://github.com/woocommerce/woocommerce/pull/63964) * Dev - Gate the Customer Review Request feature behind a FeaturesController flag (off by default). The host page is created lazily on the first request after the feature is enabled, not on plugin install. [#64895](https://github.com/woocommerce/woocommerce/pull/64895) * Dev - Make `WC_Email_Customer_Review_Request_Test` self-contained for the `customer_review_request` feature gate so `test_is_registered_with_wc_emails` doesn't depend on incidental test ordering. [#64895](https://github.com/woocommerce/woocommerce/pull/64895) * Tweak - Add "role": "content" to editable block attributes (product-sku, product-reviews-pagination-next, product-reviews-pagination-previous) for WordPress 7.0 contentOnly pattern editing compatibility. [#63977](https://github.com/woocommerce/woocommerce/pull/63977) * Tweak - Add 8px border-radius to editor meta boxes and product description to align with WP 7.0 dashboard widget styling [#64191](https://github.com/woocommerce/woocommerce/pull/64191) * Tweak - Add translatable “(incl. tax)” / “(excl. tax)” labels to product price fields depending on WooCommerce tax settings. [#62044](https://github.com/woocommerce/woocommerce/pull/62044) * Tweak - Align order edit page address Select2 dropdowns (Country/Region, State/County) with WordPress 7.0 input height and padding so they match sibling text inputs. [#64451](https://github.com/woocommerce/woocommerce/pull/64451) * Tweak - Align settings page input padding, Select2 single/multi-select text padding and border-radius, and shipping zone name/regions controls with WordPress 7.0 native form-control sizing. [#64445](https://github.com/woocommerce/woocommerce/pull/64445) * Tweak - Encapsulate product lookup table refresh behind a dedicated public method [#64093](https://github.com/woocommerce/woocommerce/pull/64093) * Tweak - Remove a border-left-color override on Woo's legacy admin notice container so "updated" notices inherit WordPress 7.0's success palette instead of the admin theme color. [#64470](https://github.com/woocommerce/woocommerce/pull/64470) * Tweak - Replace remaining hardcoded admin blues in legacy Select2 and address autocomplete stylesheets with var(--wp-admin-theme-color) so borders and hover/focus states adopt the merchant's admin color scheme. [#64468](https://github.com/woocommerce/woocommerce/pull/64468) * Tweak - Show a clear error message when users without plugin install permissions attempt to install plugins, instead of a generic failure message [#64187](https://github.com/woocommerce/woocommerce/pull/64187) * Tweak - Show clearer errors when a test email fails to send. [#64286](https://github.com/woocommerce/woocommerce/pull/64286) * Tweak - Show country name instead of country code in checkout address validation [#64008](https://github.com/woocommerce/woocommerce/pull/64008) * Tweak - Update hardcoded border-radius on three legacy admin custom buttons (addons, setup wizard, helper) from 3–4px to 2px to align with the WordPress 7.0 admin radius. [#64446](https://github.com/woocommerce/woocommerce/pull/64446) * Tweak - Update myPOS payment gateway icon to match design library [#64138](https://github.com/woocommerce/woocommerce/pull/64138) * Tweak - Update the Blueprint settings error notice background to match the WordPress 7.0 admin notice spec (#fcf0f0). [#64469](https://github.com/woocommerce/woocommerce/pull/64469) * Tweak - Vertically centre Product / Coupon Data panel labels and help-tip icons with 40px inputs on WordPress 7.0. [#64458](https://github.com/woocommerce/woocommerce/pull/64458) * Tweak - Hide the duplicate page title heading on the Customer Review Order page so the shortcode body's heading is the only H1 visitors and screen readers encounter. [#64849](https://github.com/woocommerce/woocommerce/pull/64849) * Performance - Add 3s timeout to DataSourcePoller HTTP calls and skip redundant remote fetches in wc_admin_daily when transients are fresh. [#63738](https://github.com/woocommerce/woocommerce/pull/63738) * Performance - Add missing `_prime_post_caches()` calls in AJAX downloadable product search, scheduled sales processing, and Recent Reviews widget to batch-load post data and reduce individual database queries. [#63773](https://github.com/woocommerce/woocommerce/pull/63773) * Performance - Add missing `_prime_post_caches()` calls in grouped product structured data, grouped product add-to-cart template, and download permissions adjuster to batch-load child product data to reduce individual database queries. [#63797](https://github.com/woocommerce/woocommerce/pull/63797) * Performance - A new index has been added to the wc_orders table to improve the performance of order resolution by transaction ID. [#64025](https://github.com/woocommerce/woocommerce/pull/64025) * Performance - A new index has been added to the `wc_reserved_stock` table to maintain stock reservation performance during peak sales events. [#63864](https://github.com/woocommerce/woocommerce/pull/63864) * Performance - Avoid duplicate `get_block_type_style()` call in `AbstractBlock::register_block_type()` by caching the result in a local variable. [#64256](https://github.com/woocommerce/woocommerce/pull/64256) * Performance - Improved cache warmup for the `woocommerce_refresh_order_count_cache` action to increase efficiency. [#63753](https://github.com/woocommerce/woocommerce/pull/63753) * Performance - Lazy-load _used_by post meta in WC_Coupon to avoid loading all usage records into memory on construction. [#63755](https://github.com/woocommerce/woocommerce/pull/63755) * Performance - Limit wc_translate_user_roles() to the default-domain contextual gettext hook. [#64078](https://github.com/woocommerce/woocommerce/pull/64078) * Performance - Optimize SQL performance in the wc_customer_bought_product function. [#63995](https://github.com/woocommerce/woocommerce/pull/63995) * Performance - Prime featured image caches on product archive pages to reduce SQL queries during rendering. [#63877](https://github.com/woocommerce/woocommerce/pull/63877) * Performance - Products: reduced the number of SQL queries required to populate cart data in StoreApi. [#63850](https://github.com/woocommerce/woocommerce/pull/63850) * Performance - Reduced the number of SQL queries needed to populate cart data in StoreApi. [#64088](https://github.com/woocommerce/woocommerce/pull/64088) * Performance - Reduced the number of SQL queries required to handle order collections in both the storefront and REST interfaces. [#63768](https://github.com/woocommerce/woocommerce/pull/63768) * Performance - Reduce the number of database queries on the classic cart page by priming post and image caches in `woocommerce_cross_sell_display()`. [#64085](https://github.com/woocommerce/woocommerce/pull/64085) * Performance - Reduce the number of database queries on the product edit screen by priming attachment caches before rendering the product gallery meta box. [#64089](https://github.com/woocommerce/woocommerce/pull/64089) * Performance - Reduce the number of database queries on the single product page by priming attachment caches in the StoreApi ProductSchema `get_images()` method. [#64100](https://github.com/woocommerce/woocommerce/pull/64100) * Performance - Reduce the number of database queries when listing products via the REST API by priming attachment post caches in `get_images()`. [#64070](https://github.com/woocommerce/woocommerce/pull/64070) * Enhancement - Add 'product.published' webhook topic than runs when a product is published. [#63555](https://github.com/woocommerce/woocommerce/pull/63555) * Enhancement - Add checkout evidence validation to prevent unintended order completion for orders without checkout context [#62843](https://github.com/woocommerce/woocommerce/pull/62843) * Enhancement - Add to Cart + Options: render 3rd-party product types quantity inputs with steppers [#62893](https://github.com/woocommerce/woocommerce/pull/62893) * Enhancement - Allow extensionCartUpdate's overwriteDirtyCustomerData option to accept an object with per-address control ({ shipping_address?: boolean, billing_address?: boolean }) in addition to a boolean. [#64032](https://github.com/woocommerce/woocommerce/pull/64032) * Enhancement - Cap cached filter combinations to limit transient growth from bot enumeration. [#64039](https://github.com/woocommerce/woocommerce/pull/64039) * Enhancement - My Subscriptions: show "Managed by host" or "Managed by agency" in the expiry column for host plan and agency subscriptions. [#63925](https://github.com/woocommerce/woocommerce/pull/63925) * Enhancement - Align the Customer Review Order page with the Figma design: ship the functional state gaps, swap to theme-aware classes, and route the customer to a thank-you view in place after any successful submission. [#64867](https://github.com/woocommerce/woocommerce/pull/64867) = 10.7.0 2026-04-14 = **WooCommerce** * Fix - Added try/catch guards to store notices to prevent fatal errors when context is missing. [#63402](https://github.com/woocommerce/woocommerce/pull/63402) * Fix - Add missing session methods to StoreApi SessionHandler for compatibility with WC_Session_Handler. [#63606](https://github.com/woocommerce/woocommerce/pull/63606) * Fix - Add nonce verification to `product_ordering` and `term_ordering` AJAX handlers to prevent CSRF. [#63422](https://github.com/woocommerce/woocommerce/pull/63422) * Fix - Address deprecation warnings in feedback button. [#63554](https://github.com/woocommerce/woocommerce/pull/63554) * Fix - Always show radio for payment methods on checkout. [#63351](https://github.com/woocommerce/woocommerce/pull/63351) * Fix - Fix - Show 'Billing address' instead of 'Billing and shipping address' when Local Pickup is selected and shipping is forced to the billing address. [#58220](https://github.com/woocommerce/woocommerce/pull/58220) * Fix - Fix a bug with the Store Email personalization tag that caused it to always return the admin email instead of using the `get_from_address` method from the email object context [#63605](https://github.com/woocommerce/woocommerce/pull/63605) * Fix - Fix add to cart not working on stale nonces on cached pages [#62892](https://github.com/woocommerce/woocommerce/pull/62892) * Fix - Fix a small punctuation issue at the LYS page. [#63874](https://github.com/woocommerce/woocommerce/pull/63874) * Fix - Fix attribute matching for non-ASCII characters in product CSV importer [#62963](https://github.com/woocommerce/woocommerce/pull/62963) * Fix - Fix attribute terms REST API writing menu_order to wrong meta key. [#63390](https://github.com/woocommerce/woocommerce/pull/63390) * Fix - Fix cart: prevent false "Quantity changed to 1" notices and add optimistic removal feedback [#63403](https://github.com/woocommerce/woocommerce/pull/63403) * Fix - Fix Cart and Checkout block editor detection for post-new.php and other custom editor contexts. [#63759](https://github.com/woocommerce/woocommerce/pull/63759) * Fix - Fix console warnings in the editor when using cart and checkout blocks. [#63541](https://github.com/woocommerce/woocommerce/pull/63541) * Fix - Fix customer note email preview using wrong note text and missing newline support in admin order note personalization tag. [#63459](https://github.com/woocommerce/woocommerce/pull/63459) * Fix - Fix Customers Reports advanced filters (email, username, name) by consolidating autocompleter customer IDs into customers/customers_exclude params in the Controller, and add customers_exclude support. [#63232](https://github.com/woocommerce/woocommerce/pull/63232) * Fix - Fix dashboard status widget not showing after task list completion by adding a DeprecatedOptions bridge for woocommerce_task_list_complete. [#63522](https://github.com/woocommerce/woocommerce/pull/63522) * Fix - Fix duplicate "Fulfillment updated" order notes caused by redundant save_meta_data() call in OrderFulfillmentsRestController. [#63544](https://github.com/woocommerce/woocommerce/pull/63544) * Fix - Fixed sold individually validation on shortcode cart and checkout pages. Products marked as "Sold Individually" after being added to cart now have quantity automatically reduced to 1 with correct totals calculation. [#62293](https://github.com/woocommerce/woocommerce/pull/62293) * Fix - Fixes issue where actions for shipping extension in onboarding didn't display. [#63348](https://github.com/woocommerce/woocommerce/pull/63348) * Fix - Fix extra padding on analytics tables, dashboard charts, leaderboards, and store alerts on WordPress 7.0 by setting Card/CardBody size to "none". [#63826](https://github.com/woocommerce/woocommerce/pull/63826) * Fix - Fix floating point precision error in REST API v4 refund amount validation that caused valid refunds to be rejected. [#63667](https://github.com/woocommerce/woocommerce/pull/63667) * Fix - Fix fulfillment created email subject and heading to use correct plural form when shipment contains multiple items. [#63765](https://github.com/woocommerce/woocommerce/pull/63765) * Fix - Fix incorrect new hook names in deprecated filter hooks mapping for order refund amount and reason. [#56511](https://github.com/woocommerce/woocommerce/pull/56511) * Fix - Fix insufficient color contrast for status indicators on the System Status page to meet WCAG 2.2 AA requirements. [#63746](https://github.com/woocommerce/woocommerce/pull/63746) * Fix - Fix insufficient colour contrast in Dashboard Status widget link text to meet WCAG 2.2 AA requirements. [#63521](https://github.com/woocommerce/woocommerce/pull/63521) * Fix - Fix invalid JSON Schema in MCP tool definitions: convert date-time type to proper string+format, deduplicate enum values, handle mixed/action/unrecognized types, normalize array types, recursively sanitize nested schemas, sanitize output schemas, and strip boolean required from nested properties. [#63811](https://github.com/woocommerce/woocommerce/pull/63811) * Fix - Fix math expressions being rejected in the flat rate shipping cost field [#63453](https://github.com/woocommerce/woocommerce/pull/63453) * Fix - Fix Mini-Cart badge becoming invisible after client-side navigation. [#63014](https://github.com/woocommerce/woocommerce/pull/63014) * Fix - Fix misaligned order rows on the edit order screen when Cost of Goods Sold is enabled. [#63396](https://github.com/woocommerce/woocommerce/pull/63396) * Fix - Fix older PayPal Standard orders failing shipping callbacks when the request has no token by checking for token meta before validating the token parameter. [#63885](https://github.com/woocommerce/woocommerce/pull/63885) * Fix - Fix order meta box action buttons stacking poorly on smaller viewports (~1200px) with WordPress 7.0. [#63837](https://github.com/woocommerce/woocommerce/pull/63837) * Fix - Fix PayPal Standard webhook handling for invalid links. [#63886](https://github.com/woocommerce/woocommerce/pull/63886) * Fix - Fix PHP "Undefined property" warnings in `set_order_props_from_data` when HPOS Data Caching is enabled and cached objects have missing properties. [#63295](https://github.com/woocommerce/woocommerce/pull/63295) * Fix - Fix REST v4 API silently corrupting password and API key fields with special characters [#63597](https://github.com/woocommerce/woocommerce/pull/63597) * Fix - Fix selectWoo not initializing on the layered nav dropdown widget when using the OR query type. [#63275](https://github.com/woocommerce/woocommerce/pull/63275) * Fix - Fix session cookie when guest creates account during checkout. [#63335](https://github.com/woocommerce/woocommerce/pull/63335) * Fix - Fix settings password fields silently stripping characters that resemble percent-encoded sequences. [#63595](https://github.com/woocommerce/woocommerce/pull/63595) * Fix - Fix styling issues with WP 7.0 [#63824](https://github.com/woocommerce/woocommerce/pull/63824) * Fix - Fix System Status template override detection to show actual runtime behavior, including plugin filter overrides. [#62964](https://github.com/woocommerce/woocommerce/pull/62964) * Fix - Fix template overrides with missing version headers being incorrectly flagged as outdated, and render overrides as individual rows in the System Status report for improved readability. [#63460](https://github.com/woocommerce/woocommerce/pull/63460) * Fix - Fix the misalignment of the set new/lost password fields for twenty twenty and twenty twenty one themes. [#59273](https://github.com/woocommerce/woocommerce/pull/59273) * Fix - Fix undefined site_url variable in robots_txt [#63589](https://github.com/woocommerce/woocommerce/pull/63589) * Fix - Fix variable products not working when name is different than the slug [#63736](https://github.com/woocommerce/woocommerce/pull/63736) * Fix - Fix _load_textdomain_just_in_time warning in FulfillmentsController by checking feature option directly instead of using FeaturesController::feature_is_enabled() before init action. [#63893](https://github.com/woocommerce/woocommerce/pull/63893) * Fix - Make select focused state consistent with other input types [#63608](https://github.com/woocommerce/woocommerce/pull/63608) * Fix - Make sure that woocommerce_email_templates_*_post_id options are properly deleted when woo_email posts are removed in non-admin environments, such as WP-CLI. [#63500](https://github.com/woocommerce/woocommerce/pull/63500) * Fix - Make username and password optional in V4 Customers REST API regardless of store registration settings. [#63536](https://github.com/woocommerce/woocommerce/pull/63536) * Fix - Make zone locations optional in the V4 Shipping Zones REST API schema so that "Everywhere" zones can be created without providing a locations array. [#63685](https://github.com/woocommerce/woocommerce/pull/63685) * Fix - Mini-Cart: use server-computed item count when third-party filters modify `woocommerce_cart_contents_count`. [#63378](https://github.com/woocommerce/woocommerce/pull/63378) * Fix - Prevent "Order again" button showing on order confirmation page [#63499](https://github.com/woocommerce/woocommerce/pull/63499) * Fix - Prevent Activity panel abbreviated notification SlotFill from triggering repeated re-renders by creating the slot at module scope. [#63830](https://github.com/woocommerce/woocommerce/pull/63830) * Fix - Prevent draft products from being accessible via Store API and redact content for password-protected products [#63466](https://github.com/woocommerce/woocommerce/pull/63466) * Fix - Prevent fatal error when FTP filesystem connection fails during logging operations. [#63298](https://github.com/woocommerce/woocommerce/pull/63298) * Fix - Prevent mini-cart drawer having a white background and use page background instead [#63758](https://github.com/woocommerce/woocommerce/pull/63758) * Fix - Prevent stored XSS on order notes added via REST API v4 [#63661](https://github.com/woocommerce/woocommerce/pull/63661) * Fix - Skip initial save of POS store name setting so emails use the current site name instead of the stale "My WordPress Site" default. [#63505](https://github.com/woocommerce/woocommerce/pull/63505) * Fix - Update slug sanitize callback to use sanitize_slug [#63342](https://github.com/woocommerce/woocommerce/pull/63342) * Fix - Wrong escaping of "&" character in product name in img alt tag in cart and checkout pages [#63637](https://github.com/woocommerce/woocommerce/pull/63637) * Fix - Add to Cart + Options: Ensure attributes with spaces and special characters work well in dropdown mode [#64037](https://github.com/woocommerce/woocommerce/pull/64037) * Fix - Fix Add to Cart button not visible when displaying a Single Product block with a variation with only one product left [#63947](https://github.com/woocommerce/woocommerce/pull/63947) * Fix - Fix cart shipping and totals stuck as loading when removing bundled products [#64000](https://github.com/woocommerce/woocommerce/pull/64000) * Fix - Fix issues when Product Gallery was used inside the Product block [#63976](https://github.com/woocommerce/woocommerce/pull/63976) * Fix - Fix settings page label vertical alignment on WordPress 7.0 where increased form element height caused labels to sit too high relative to their fields. [#63924](https://github.com/woocommerce/woocommerce/pull/63924) * Fix - Fix entity-encoded HTML in `item_data` being incorrectly decoded during mini-cart rendering. [#64122](https://github.com/woocommerce/woocommerce/pull/64122) * Fix - Fix fatal error on Payments settings page when `woocommerce_gateway_order` option contains legacy integer keys. [#64061](https://github.com/woocommerce/woocommerce/pull/64061) * Fix - Fix inconsistent icon spacing in the customer account block header on mobile. [#64126](https://github.com/woocommerce/woocommerce/pull/64126) * Fix - Fix shipping provider filter on orders list using wrong meta key, causing no results to appear. [#64101](https://github.com/woocommerce/woocommerce/pull/64101) * Fix - Fix tracking number lookup breaking when custom shipping provider definitions contain non-string values. [#64075](https://github.com/woocommerce/woocommerce/pull/64075) * Add - Add custom shipping providers settings UI and shipping provider filter for the orders list. [#63879](https://github.com/woocommerce/woocommerce/pull/63879) * Add - Add description for COD enable_for_methods field in v4 settings API. [#63767](https://github.com/woocommerce/woocommerce/pull/63767) * Add - Add design-aligned grouped settings schemas for offline payment gateways (cheque, BACS, COD) in the v4 settings API. [#63734](https://github.com/woocommerce/woocommerce/pull/63734) * Add - Add embeddable _links for upsells, cross-sells, and related products to Store API Products endpoint. [#62603](https://github.com/woocommerce/woocommerce/pull/62603) * Add - Add export column and item filters to Revenue Stats, Taxes, and Variations report controllers, and forward selected currency from URL query params into the export job payload. [#63618](https://github.com/woocommerce/woocommerce/pull/63618) * Add - Add formatted_weight and formatted_dimensions to Store API ProductSchema [#63405](https://github.com/woocommerce/woocommerce/pull/63405) * Add - Add notice to Cart/Checkout blocks front-end to show notices about incompatible plugins to admin users. [#62242](https://github.com/woocommerce/woocommerce/pull/62242) * Add - Add order notes for fulfillment lifecycle events (created, updated, deleted, status changes) to improve order history tracking and auditability. [#63516](https://github.com/woocommerce/woocommerce/pull/63516) * Add - Add reset notification email content action to the email editor, allowing users to reset email content to the original plugin-distributed state. [#63558](https://github.com/woocommerce/woocommerce/pull/63558) * Add - Add server-side auto-selection of email template when template_id is omitted in send_email endpoint. [#63556](https://github.com/woocommerce/woocommerce/pull/63556) * Add - Add ShipStation and Packlink as shipping extension options in the Core Profiler for supported countries (ShipStation: CA, DE, GB, AU, NZ; Packlink: FR, ES, IT, NL, AT, BE). [#63385](https://github.com/woocommerce/woocommerce/pull/63385) * Add - Add ShipStation and Packlink PRO as recommended shipping solutions on the Shipping settings page, filtered by store country. [#63383](https://github.com/woocommerce/woocommerce/pull/63383) * Add - Add smaller image options for product images in srcset to reduce bandwidth/load time on cart/checkout pages [#63731](https://github.com/woocommerce/woocommerce/pull/63731) * Add - Add support for notice data in recommended payment methods, enabling payment gateways to surface requirement warnings during onboarding. [#63854](https://github.com/woocommerce/woocommerce/pull/63854) * Add - Add telemetry for fulfillment feature adoption and usage tracking [#63820](https://github.com/woocommerce/woocommerce/pull/63820) * Add - Add unified shipping partner Tracks events (impression, click, install, activate) in the Core Profiler onboarding flow. [#63439](https://github.com/woocommerce/woocommerce/pull/63439) * Add - Add woocommerce_delete_expired_draft_orders_batch_size filter to make draft order cleanup batch size configurable [#63740](https://github.com/woocommerce/woocommerce/pull/63740) * Add - Add `woocommerce_email_block_template_html` filter to allow customization of email block template HTML before it is saved. [#63607](https://github.com/woocommerce/woocommerce/pull/63607) * Add - Apply `woocommerce_variation_option_name` filter in ProductItemTrait, allowing third-parties to optionally add relevant information to variation option names. [#63673](https://github.com/woocommerce/woocommerce/pull/63673) * Add - Exclude WCPay test orders from analytics data to prevent test transactions from polluting reports. [#63550](https://github.com/woocommerce/woocommerce/pull/63550) * Add - Show preview products and placeholder cards in the email editor for product collection blocks when the store has no products [#63612](https://github.com/woocommerce/woocommerce/pull/63612) * Add - Add myPOS and Evergreen Payments as official payment partners. [#64097](https://github.com/woocommerce/woocommerce/pull/64097) * Update - Accept top-level enabled, title, description, and order fields in the v4 payment gateway settings PUT endpoint. This aligns the PUT shape with the GET response, enabling @wordpress/core-data to track dirty state correctly. The values parameter remains supported for backwards compatibility. [#63714](https://github.com/woocommerce/woocommerce/pull/63714) * Update - Add weight and dimensions to Store API ProductSchema / Products endpoint. [#63334](https://github.com/woocommerce/woocommerce/pull/63334) * Update - Change Cache Product Objects feature default plugin compatibility to COMPATIBLE so extensions that haven't explicitly declared compatibility are no longer shown as incompatible. [#63243](https://github.com/woocommerce/woocommerce/pull/63243) * Update - Disable HPOS sync-on-read by default and add admin notice for affected sites. [#63175](https://github.com/woocommerce/woocommerce/pull/63175) * Update - Extract "get_primed_visible_children()" helper in "WC_Product_Grouped". [#63284](https://github.com/woocommerce/woocommerce/pull/63284) * Update - Make checkout item quantity round and inherit theme colours [#63007](https://github.com/woocommerce/woocommerce/pull/63007) * Update - Refactor cart, cart-link, mini-cart and checkout blocks to use isPreviewMode flag [#63313](https://github.com/woocommerce/woocommerce/pull/63313) * Update - Register fulfillments data store via WC_Data_Store for extensibility, allowing extensions to provide custom data store implementations. [#63485](https://github.com/woocommerce/woocommerce/pull/63485) * Update - Replace Facebook and Meta Ads/Kliken with Reddit and Snapchat in the Marketing Overview channels list, reorder the sales channels, and update the Google for WooCommerce description [#63416](https://github.com/woocommerce/woocommerce/pull/63416) * Update - Standardize closing support text across all customer-facing block email templates. [#63463](https://github.com/woocommerce/woocommerce/pull/63463) * Update - Textarea inputs on Checkout will now have the correct placeholder colour on light themes [#63539](https://github.com/woocommerce/woocommerce/pull/63539) * Update - Update 'on hold' email copy in block email editor to be more neutral for services and virtual products. [#63496](https://github.com/woocommerce/woocommerce/pull/63496) * Update - Admin styling adjustments with WordPress 7.0 [#64027](https://github.com/woocommerce/woocommerce/pull/64027) * Dev - Convert e2e-pw API test files to TypeScript. [#63314](https://github.com/woocommerce/woocommerce/pull/63314) * Dev - Convert e2e-pw utils to TypeScript. [#63318](https://github.com/woocommerce/woocommerce/pull/63318) * Dev - Convert fixtures and utils of the e2e-pw directory to TypeScript. [#63315](https://github.com/woocommerce/woocommerce/pull/63315) * Dev - Introduce a new performance skill focused on effectively using caching priming APIs. [#63706](https://github.com/woocommerce/woocommerce/pull/63706) * Dev - Introduce end-to-end tests for PayPal Standard (enablement flow). [#63068](https://github.com/woocommerce/woocommerce/pull/63068) * Dev - Introduce end-to-end tests for PayPal Standard (Jetpack onboarding flow). [#62982](https://github.com/woocommerce/woocommerce/pull/62982) * Dev - Migrate dinero.js from v1.9.1 to v2.0.0 in WooCommerce Blocks. [#63543](https://github.com/woocommerce/woocommerce/pull/63543) * Dev - Consolidate get_shipping_providers and get_shipping_providers_object into a single method that always returns AbstractShippingProvider instances. [#64102](https://github.com/woocommerce/woocommerce/pull/64102) * Tweak - Add data-cart-item-key attribute to cart line item row block. [#63090](https://github.com/woocommerce/woocommerce/pull/63090) * Tweak - Fulfillment UI/UX minor tweaks: clickable card headers, reduced padding, copy confirmation, provider label resolution, and tracking URL auto-update. [#63899](https://github.com/woocommerce/woocommerce/pull/63899) * Tweak - Refine order notification email styling: adjust order summary layout and item alignment [#63306](https://github.com/woocommerce/woocommerce/pull/63306) * Performance - Added the missing shipping tables indexes to improve the performance of cart and checkout workflows for complex shipping configurations. [#63674](https://github.com/woocommerce/woocommerce/pull/63674) * Performance - Blocks: pin the number of SQL queries required to retrieve block templates from the database (2 per template type). [#63399](https://github.com/woocommerce/woocommerce/pull/63399) * Performance - Cache Store API products last modified timestamp in the object cache to avoid a database query on every request. [#63228](https://github.com/woocommerce/woocommerce/pull/63228) * Performance - Customers: guarded updates of the last activity timestamp. [#63355](https://github.com/woocommerce/woocommerce/pull/63355) * Performance - Performance: reduced the number of SQL queries required to persist a draft order during checkout (with CoGS enabled). [#63372](https://github.com/woocommerce/woocommerce/pull/63372) * Performance - Performance: reduced the number of SQL queries required to persist a draft order during checkout. [#63258](https://github.com/woocommerce/woocommerce/pull/63258) * Performance - Prime order item meta caches during HPOS order queries to eliminate N+1 queries in REST API serialization. [#63440](https://github.com/woocommerce/woocommerce/pull/63440) * Performance - Prime product caches and add targetHints to REST API v4 orders endpoint to reduce N+1 queries during serialization. [#63654](https://github.com/woocommerce/woocommerce/pull/63654) * Performance - Products: reduced the number of SQL queries required to populate cart data in StoreApi. [#63319](https://github.com/woocommerce/woocommerce/pull/63319) * Performance - Reduce SQL queries on legacy product grid blocks, Product Gallery, and Product Button by adding missing "_prime_post_caches()" calls to batch-load post data. [#63750](https://github.com/woocommerce/woocommerce/pull/63750) * Performance - Reduce the number of SQL queries on the linked products meta box and sales by product report by adding missing cache priming. [#63737](https://github.com/woocommerce/woocommerce/pull/63737) * Performance - Remove unnecessary `calculate_totals()` call from `DELETE /wc/store/v1/cart/coupons`. The result was never used since the endpoint returns an empty response body. [#63404](https://github.com/woocommerce/woocommerce/pull/63404) * Enhancement - Add optional dropdown navigation to the Customer Account block, displaying account menu links in a dropdown menu when enabled. [#63301](https://github.com/woocommerce/woocommerce/pull/63301) * Enhancement - Improve fulfillment drawer accessibility: unique ARIA IDs, fix redundant aria-labels, eliminate double screen reader announcements, and replace setTimeout-based focus management with requestAnimationFrame [#63876](https://github.com/woocommerce/woocommerce/pull/63876) * Enhancement - Integrate the payment gateway admin notification into the WooCommerce email system with full support for email styling, customizable settings, and block email editor. [#63249](https://github.com/woocommerce/woocommerce/pull/63249) * Enhancement - Make email header image/logo clickable with a link to the store homepage in classic email templates. Adds `woocommerce_email_header_image_url` filter for customization. [#63559](https://github.com/woocommerce/woocommerce/pull/63559) * Enhancement - Suppress standard transactional emails and auto-trigger POS email templates for orders paid at POS, regardless of where the order was created. [#63322](https://github.com/woocommerce/woocommerce/pull/63322) * Enhancement - Update cart, checkout, and mini-cart block item spacing to improve clarity. [#63241](https://github.com/woocommerce/woocommerce/pull/63241) * Enhancement - Use the configured email subject from WC_Email settings when sending preview emails instead of the raw post title. [#63504](https://github.com/woocommerce/woocommerce/pull/63504) = 10.6.2 2026-03-31 = **WooCommerce** * Fix - Fix a small punctuation issue at the LYS page. [#63873](https://github.com/woocommerce/woocommerce/pull/63873) * Fix - Fix extra padding on analytics tables, dashboard charts, leaderboards, and store alerts on WordPress 7.0 by setting Card/CardBody size to "none". [#63827](https://github.com/woocommerce/woocommerce/pull/63827) * Fix - Fix order meta box action buttons stacking poorly on smaller viewports (~1200px) with WordPress 7.0. [#63836](https://github.com/woocommerce/woocommerce/pull/63836) * Fix - Fix styling issues with WP 7.0 [#63825](https://github.com/woocommerce/woocommerce/pull/63825) * Fix - Fix variable products not working when name is different than the slug [#63771](https://github.com/woocommerce/woocommerce/pull/63771) * Fix - Prevent Activity panel abbreviated notification SlotFill from triggering repeated re-renders by creating the slot at module scope. [#63829](https://github.com/woocommerce/woocommerce/pull/63829) * Tweak - Remove unused code from the Product Collection cart-contents handler. [#63927](https://github.com/woocommerce/woocommerce/pull/63927) = 10.6.1 2026-03-12 = **WooCommerce** * Fix - Add to Cart: fix validation of attributes with multi-word names [#63647](https://github.com/woocommerce/woocommerce/pull/63647) * Fix - Place newly installed payment gateways above offline payment methods instead of at the bottom of the list. [#63648](https://github.com/woocommerce/woocommerce/pull/63648) * Fix - Show shipping package title as "Shipment" instead of "Shipment 1" [#63649](https://github.com/woocommerce/woocommerce/pull/63649) = 10.6.0 2026-03-10 = **WooCommerce** * Fix - Accessibility improvement for order summary in Checkout block [#62453](https://github.com/woocommerce/woocommerce/pull/62453) * Fix - Add Cache-Control headers to cart API responses to prevent browser caching [#62653](https://github.com/woocommerce/woocommerce/pull/62653) * Fix - Add to Cart + Options: add default margin between inner elements [#63220](https://github.com/woocommerce/woocommerce/pull/63220) * Fix - Adjust classes used for menu notification bubbles. [#62799](https://github.com/woocommerce/woocommerce/pull/62799) * Fix - Allow the Products onboarding task to revert to incomplete when all products are removed [#63239](https://github.com/woocommerce/woocommerce/pull/63239) * Fix - Don't disable submit button in meta boxes with empty textarea fields [#62590](https://github.com/woocommerce/woocommerce/pull/62590) * Fix - Ensure Store API cart sessions restore correctly for rest_route requests with Cart-Token. [#62973](https://github.com/woocommerce/woocommerce/pull/62973) * Fix - fix: ensure address autocomplete is persisted on both billing and shipping forms [#62796](https://github.com/woocommerce/woocommerce/pull/62796) * Fix - Fix: get order(s) REST API endpoints failing when invalid coupon metadata is stored [#63010](https://github.com/woocommerce/woocommerce/pull/63010) * Fix - Fix: Round percentage-based flat rate shipping fee to display decimals to prevent $0.01 rounding errors. [#62722](https://github.com/woocommerce/woocommerce/pull/62722) * Fix - Fix a bug where error notices don't show up in the Mini Cart on first load. [#62315](https://github.com/woocommerce/woocommerce/pull/62315) * Fix - Fix an a11y issue when only one country is available, ensure the country is still rendered as an input field, but retain existing styling. [#61835](https://github.com/woocommerce/woocommerce/pull/61835) * Fix - Fix auto-cancellation for unpaid checkout block orders [#58262](https://github.com/woocommerce/woocommerce/pull/58262) * Fix - Fix cart quantity selector briefly reverting to previous value when changing quantity rapidly. [#62788](https://github.com/woocommerce/woocommerce/pull/62788) * Fix - Fix dashboard showing $0 revenue when browser timezone differs from store timezone [#62872](https://github.com/woocommerce/woocommerce/pull/62872) * Fix - Fix duplicate breadcrumb entries on My Account endpoint pages when using the Breadcrumb block in global templates. [#62793](https://github.com/woocommerce/woocommerce/pull/62793) * Fix - Fixed case-sensitive email verification issue that prevented guests from accessing order payment pages when entering their email address in a different case than stored in the order. [#62974](https://github.com/woocommerce/woocommerce/pull/62974) * Fix - Fix email preview to use the configured WooCommerce "From" email address and name instead of WordPress defaults. [#62936](https://github.com/woocommerce/woocommerce/pull/62936) * Fix - Fix empty email subject for "Partially refunded order" email in the block email editor by properly retrieving the subject_partial option. [#63047](https://github.com/woocommerce/woocommerce/pull/63047) * Fix - Fixes a bug where updating the stock count from the dashboard for a variable product changed its product type back to a simple product and removed all variations. [#63250](https://github.com/woocommerce/woocommerce/pull/63250) * Fix - Fixes a bug with analytics stock totals that included trashed products [#63160](https://github.com/woocommerce/woocommerce/pull/63160) * Fix - Fixes an issue where Analytics > Categories would crash if a product category had a `parent` that no longer exists in the taxonomy tables due to manual deletion outside the admin UI. [#58312](https://github.com/woocommerce/woocommerce/pull/58312) * Fix - Fix get_site_user_meta method to respect arguments passed to it. [#61926](https://github.com/woocommerce/woocommerce/pull/61926) * Fix - Fix Local Pickup not rendering in Block Checkout when third-party plugins call calculate_totals() early with shortcode cart context. [#62873](https://github.com/woocommerce/woocommerce/pull/62873) * Fix - Fix missing closing HTML tags for shipping zones examples [#60386](https://github.com/woocommerce/woocommerce/pull/60386) * Fix - Fix PHPStan errors in wc_get_product_attachment_props() by adding is_array() checks before accessing array offsets. [#62919](https://github.com/woocommerce/woocommerce/pull/62919) * Fix - Fix PHP warnings when product categories have non-sequential array keys due to plugin filters. [#63263](https://github.com/woocommerce/woocommerce/pull/63263) * Fix - Fix POS catalog cleanup job to schedule deletion for each generated file instead of only the first one. [#63107](https://github.com/woocommerce/woocommerce/pull/63107) * Fix - Fix Store API order endpoint returning empty values for "Any" variation attributes. Retrieves customer selections from order metadata to match cart endpoint behavior. [#62476](https://github.com/woocommerce/woocommerce/pull/62476) * Fix - Fix WC_Geolocation::geolocate_ip() doesn't use fallback if MaxMind integration is disabled. [#62660](https://github.com/woocommerce/woocommerce/pull/62660) * Fix - Implement request batching/queueing for cart operations to fix multiple issues with state resolution in the cart UI. [#62766](https://github.com/woocommerce/woocommerce/pull/62766) * Fix - Improve order editor locking support for sub-types (like subscriptions) when using HPOS. [#62671](https://github.com/woocommerce/woocommerce/pull/62671) * Fix - Prevent fatal errors when WooCommerce.com Helper API transients contain corrupted data. [#62865](https://github.com/woocommerce/woocommerce/pull/62865) * Fix - Prevent undefined index notices when connecting admin pages without an `id`. [#61904](https://github.com/woocommerce/woocommerce/pull/61904) * Fix - Product Collection: implement support for Taxonomy filters on posts and pages [#62860](https://github.com/woocommerce/woocommerce/pull/62860) * Fix - Product Collection: prevent warnings if block is saved in a picker state [#63032](https://github.com/woocommerce/woocommerce/pull/63032) * Fix - Show variable product price in schema based on woocommerce_tax_display_shop setting so the visual prices matches the schema price [#61662](https://github.com/woocommerce/woocommerce/pull/61662) * Fix - Updated offerCount product schema value to only count purchasable product variations, excluding those without price or stock. [#61649](https://github.com/woocommerce/woocommerce/pull/61649) * Fix - Update email settings actions menu: remove divider between Edit and Send test email, change terminology from Enable/Disable to Activate/Deactivate email. [#63001](https://github.com/woocommerce/woocommerce/pull/63001) * Fix - Update pattern names to follow naming convention [#62700](https://github.com/woocommerce/woocommerce/pull/62700) * Fix - Use atomic locking to prevent WC_Install::install() from running concurrently. [#63100](https://github.com/woocommerce/woocommerce/pull/63100) * Fix - Use existing "Save %s" translation for mini cart discount badge to ensure correct translation for discount savings. [#62647](https://github.com/woocommerce/woocommerce/pull/62647) * Fix - Validate page IDs returned by the `woocommerce_navigation_connect_page_options` filter before registering them [#62925](https://github.com/woocommerce/woocommerce/pull/62925) * Fix - Verify checkout page exists before adding customizer styles. [#61847](https://github.com/woocommerce/woocommerce/pull/61847) * Fix - Fix Store API batch endpoint path validation to prevent routing requests to non-Store-API endpoints. [#63512](https://github.com/woocommerce/woocommerce/pull/63512) * Fix - Fix - Handle PayPal Standard duplicate invoice ID errors by updating the invoice ID in the PayPal order and retrying payment capture. [#63540](https://github.com/woocommerce/woocommerce/pull/63540) * Fix - Fix Product Gallery dialog page refresh on WordPress 7.0 by using withSyncEvent for the openDialog action. [#63571](https://github.com/woocommerce/woocommerce/pull/63571) * Fix - Prevent repeated PayPal Standard order details API requests when the first request returns 404. [#63561](https://github.com/woocommerce/woocommerce/pull/63561) * Fix - Validate shipping country against PayPal’s supported countries instead of WooCommerce’s full country list to avoid invalid country codes in PayPal requests. [#63548](https://github.com/woocommerce/woocommerce/pull/63548) * Fix - Prevent stored XSS on order notes added via REST API [#63616](https://github.com/woocommerce/woocommerce/pull/63616) * Add - Add "Products by Brand" collection to Product Collection block. [#62817](https://github.com/woocommerce/woocommerce/pull/62817) * Add - Add caching for the taxes REST API endpoints [#62931](https://github.com/woocommerce/woocommerce/pull/62931) * Add - Add dedicated email class and block template for partially refunded orders in the block email editor to ensure consistent visual styling across all transactional emails. [#62895](https://github.com/woocommerce/woocommerce/pull/62895) * Add - Add filters `woocommerce_emails_api_settings_schema_validate_and_sanitize_settings` and `woocommerce_emails_settings_schema_validate_and_sanitize_settings` to allow customization of email settings validation in the REST API. [#63170](https://github.com/woocommerce/woocommerce/pull/63170) * Add - Add Reddit Ads to core profiler onboarding wizard [#62932](https://github.com/woocommerce/woocommerce/pull/62932) * Add - Adds Marketplace CTAs to some of the settings pages. [#63112](https://github.com/woocommerce/woocommerce/pull/63112) * Add - Add Snapchat Ads to core profiler onboarding wizard [#62916](https://github.com/woocommerce/woocommerce/pull/62916) * Add - Add support for array of slugs in REST API terms controller slug parameter. The slug parameter now accepts both a single string and an array of strings, matching WordPress core WP_Term_Query capabilities. [#60565](https://github.com/woocommerce/woocommerce/pull/60565) * Add - Add `woocommerce_shipping_prices_include_tax` filter to support tax-inclusive shipping prices [#62944](https://github.com/woocommerce/woocommerce/pull/62944) * Add - Bind some Cart/Checkout UI elements to block themes' "extra-small" font size for consistency. [#62866](https://github.com/woocommerce/woocommerce/pull/62866) * Add - Breadcrumbs: Filter final list of crumbs in core block [#62770](https://github.com/woocommerce/woocommerce/pull/62770) * Add - Handpicked Products: journey starts with product picker [#62989](https://github.com/woocommerce/woocommerce/pull/62989) * Add - Modified the Add to Cart + Options block to auto-select attribute fields, and display attributes in conflict [#61389](https://github.com/woocommerce/woocommerce/pull/61389) * Add - Product Reviews block: add support for replies [#63161](https://github.com/woocommerce/woocommerce/pull/63161) * Add - Products by Brand: journey starts with choosing initial Brands [#63023](https://github.com/woocommerce/woocommerce/pull/63023) * Add - Products by Tag/Category: journey starts with terms picker [#62993](https://github.com/woocommerce/woocommerce/pull/62993) * Add - Taxonomy Filters: Add option to sort terms by menu_order [#62940](https://github.com/woocommerce/woocommerce/pull/62940) * Update - Add caching for the continents REST API endpoints [#62856](https://github.com/woocommerce/woocommerce/pull/62856) * Update - Add caching for the countries REST API endpoints [#62834](https://github.com/woocommerce/woocommerce/pull/62834) * Update - Add caching for the currencies REST API endpoints [#62816](https://github.com/woocommerce/woocommerce/pull/62816) * Update - Add document for `woocommerce_sale_badge_text` filter [#62896](https://github.com/woocommerce/woocommerce/pull/62896) * Update - Add global identifier (GTIN/UPC/EAN/ISBN) support to admin product search. [#60052](https://github.com/woocommerce/woocommerce/pull/60052) * Update - Add migration UI and conversion logic to upgrade WooCommerce Accordion blocks to the WordPress core Accordion block in WP 6.9+. [#62787](https://github.com/woocommerce/woocommerce/pull/62787) * Update - Add missing relevant hooks info for products and currencies REST API endpoints caching [#62859](https://github.com/woocommerce/woocommerce/pull/62859) * Update - Add relevant version strings support to the RestApiCache trait [#62961](https://github.com/woocommerce/woocommerce/pull/62961) * Update - Add support for relevant files to the RestApiCache trait [#62768](https://github.com/woocommerce/woocommerce/pull/62768) * Update - Add the OrdersVersionStringInvalidator class [#63079](https://github.com/woocommerce/woocommerce/pull/63079) * Update - Change the "discount" colour in Cart/Checkout block totals to be more accessible (now uses the same colour as the theme) [#62971](https://github.com/woocommerce/woocommerce/pull/62971) * Update - Enable customer cancelled order email notification by default for new installations [#63094](https://github.com/woocommerce/woocommerce/pull/63094) * Update - feat: allow payment methods to render a custom "Place order" button on block-based checkout. [#62509](https://github.com/woocommerce/woocommerce/pull/62509) * Update - feat: allow payment methods to render a custom "Place order" button on shortcode-based checkout. [#62509](https://github.com/woocommerce/woocommerce/pull/62509) * Update - Improve Product Collection block in email editor: rename "Products per page" to "Number of products" and add support for two-column layout. [#63122](https://github.com/woocommerce/woocommerce/pull/63122) * Update - Item data and variation data now show inline on the Cart and Checkout blocks [#62897](https://github.com/woocommerce/woocommerce/pull/62897) * Update - Make Product Gallery and Add to Cart + Options blocks the default inside the Product block and when updating from the Classic Template block [#60872](https://github.com/woocommerce/woocommerce/pull/60872) * Update - Make VersionStringGenerator and RestApiCache more robust against bad-behaved object caches [#63259](https://github.com/woocommerce/woocommerce/pull/63259) * Update - Move add note on the order details to the top to be close to the most recent note [#61375](https://github.com/woocommerce/woocommerce/pull/61375) * Update - Move the "Save $X" badges in Cart/Mini-cart alongside the individual item prices to save vertical space. [#63012](https://github.com/woocommerce/woocommerce/pull/63012) * Update - Position the remove button to the right of the quantity picker and use trash icon instead of text in Cart block [#62965](https://github.com/woocommerce/woocommerce/pull/62965) * Update - Prevent errors showing on empty checkout fields until the form is submitted. [#62689](https://github.com/woocommerce/woocommerce/pull/62689) * Update - Register TemplateSelection via EmailActionsFill for extensibility [#63277](https://github.com/woocommerce/woocommerce/pull/63277) * Update - Remove heading block from Product Collection when used in the email editor. [#63180](https://github.com/woocommerce/woocommerce/pull/63180) * Update - Removes PanelBody and uses ToolsPanel for Button, Image and Title blocks [#62712](https://github.com/woocommerce/woocommerce/pull/62712) * Update - Removes PanelBody and uses ToolsPanel for Catalog Sorting Block [#62699](https://github.com/woocommerce/woocommerce/pull/62699) * Update - Removes PanelBody and uses ToolsPanel for Order Confirmation Block [#62698](https://github.com/woocommerce/woocommerce/pull/62698) * Update - Removes PanelBody and uses ToolsPanel for Product Filters blocks [#62723](https://github.com/woocommerce/woocommerce/pull/62723) * Update - Removes PanelBody and uses ToolsPanel for Product Gallery block [#62724](https://github.com/woocommerce/woocommerce/pull/62724) * Update - Removes PanelBody and uses ToolsPanel in Product Category Title block [#62904](https://github.com/woocommerce/woocommerce/pull/62904) * Update - Removes PanelBody and uses ToolsPanel in Product Specifications block [#62903](https://github.com/woocommerce/woocommerce/pull/62903) * Update - Update default email template footer styling and center-align footer text across all block email templates. [#63011](https://github.com/woocommerce/woocommerce/pull/63011) * Update - Update downloadable file URL placeholder from 'http://' to 'https://'. [#63081](https://github.com/woocommerce/woocommerce/pull/63081) * Update - Update inputs and border colours in Cart/Checkout blocks to match the theme's text colour. [#62710](https://github.com/woocommerce/woocommerce/pull/62710) * Update - Update the `cancel_url` of PayPal Standard to the checkout page URL. [#63050](https://github.com/woocommerce/woocommerce/pull/63050) * Update - Added hooks for user triggered cart updates. [#63575](https://github.com/woocommerce/woocommerce/pull/63575) * Dev - Add experimental wc_interactivity_api_load_product API for hydrating product state for iAPI powered blocks. [#62167](https://github.com/woocommerce/woocommerce/pull/62167) * Dev - Add missing @return PHPDoc annotations to 5 files, reducing PHPStan baseline by 149 errors (batch 3). [#63149](https://github.com/woocommerce/woocommerce/pull/63149) * Dev - Add missing @return PHPDoc annotations to 6 files, reducing PHPStan baseline by 152 errors (batch 4). [#63173](https://github.com/woocommerce/woocommerce/pull/63173) * Dev - Add missing @return PHPDoc annotations to 6 files, reducing PHPStan baseline by 278 errors (batch 2). [#63148](https://github.com/woocommerce/woocommerce/pull/63148) * Dev - Add missing @return PHPDoc annotations to reduce PHPStan baseline by 374 errors. [#63147](https://github.com/woocommerce/woocommerce/pull/63147) * Dev - Add PR template instructions to CLAUDE.md for AI-assisted development. [#62878](https://github.com/woocommerce/woocommerce/pull/62878) * Dev - Convert e2e-utils-playwright package to TypeScript. [#63102](https://github.com/woocommerce/woocommerce/pull/63102) * Dev - Convert fifth set of e2e-pw test files to TypeScript. [#63214](https://github.com/woocommerce/woocommerce/pull/63214) * Dev - Convert first set of e2e-pw tests to TypeScript. [#63190](https://github.com/woocommerce/woocommerce/pull/63190) * Dev - Convert fourth set of e2e-pw test file to TypeScript. [#63213](https://github.com/woocommerce/woocommerce/pull/63213) * Dev - Convert second set of e2e-pw test files to TypeScript. [#63198](https://github.com/woocommerce/woocommerce/pull/63198) * Dev - Convert third set of e2e-pw tests to TypeScript. [#63212](https://github.com/woocommerce/woocommerce/pull/63212) * Dev - Fix PHPStan baseline after email tracker endpoint removal [#63134](https://github.com/woocommerce/woocommerce/pull/63134) * Dev - Interactivity API Mini Cart: utilize data-wp-on-document directive to handle add/remove cart events. [#62673](https://github.com/woocommerce/woocommerce/pull/62673) * Dev - Mention internal code in more places in the documentation [#63108](https://github.com/woocommerce/woocommerce/pull/63108) * Dev - Only apply no-store header to GET request of Mini Cart store. [#62615](https://github.com/woocommerce/woocommerce/pull/62615) * Dev - Remove fail-safe WooPayments onboarding URLs. [#63247](https://github.com/woocommerce/woocommerce/pull/63247) * Dev - Remove orphaned email tracker REST endpoint and deprecate track_opened_email method (follow-up to #55660) [#63071](https://github.com/woocommerce/woocommerce/pull/63071) * Dev - Replace custom `needsRefreshForInteractivityAPI` with native `clientNavigationDisabled` from WordPress core's Interactivity Router. [#63230](https://github.com/woocommerce/woocommerce/pull/63230) * Dev - Replace internal wiki links with updated developer docs links [#63251](https://github.com/woocommerce/woocommerce/pull/63251) * Dev - Scaffold support files for TypeScript conversion of e2e-pw tests. [#63188](https://github.com/woocommerce/woocommerce/pull/63188) * Dev - Update Add to Cart with Options to use server hydrated product state. [#62880](https://github.com/woocommerce/woocommerce/pull/62880) * Dev - Adjust tests for WP 7.0-beta.1 compatibility [#63427](https://github.com/woocommerce/woocommerce/pull/63427) * Dev - E2E tests adjustments to WP 7.0 [#63432](https://github.com/woocommerce/woocommerce/pull/63432) * Tweak - Add instanceof/is_callable checks to the `clear` method of `WC_Logger` [#62637](https://github.com/woocommerce/woocommerce/pull/62637) * Tweak - Changed subscription status from "Cancelled" to "Auto-renew: off" for non-auto-renewing subscriptions in My Subscriptions. [#62772](https://github.com/woocommerce/woocommerce/pull/62772) * Tweak - Fix Kurdistan state name formatting in Iranian provinces to use parentheses like all other states [#60337](https://github.com/woocommerce/woocommerce/pull/60337) * Tweak - Fix N-Genius Online payment extension suggestion name and description. [#63245](https://github.com/woocommerce/woocommerce/pull/63245) * Tweak - Limit `/products` and `/products/reviews` StoreAPI endpoints to 100 results per page. [#61755](https://github.com/woocommerce/woocommerce/pull/61755) * Tweak - Move `handleSubmit` inside `addToCart` in `add-to-cart-with-options` store. [#63105](https://github.com/woocommerce/woocommerce/pull/63105) * Tweak - Refactor `getQuantityConstraints` and `normalizeProductFromStore` in iAPI cart store [#63033](https://github.com/woocommerce/woocommerce/pull/63033) * Tweak - Replace admin bar height with css variable [#62608](https://github.com/woocommerce/woocommerce/pull/62608) * Tweak - Stop autoloading `woocommerce_status_log_db_sources` option [#62806](https://github.com/woocommerce/woocommerce/pull/62806) * Tweak - Use wp_is_serving_rest_request() in MCPAdapterProvider instead of contants. [#62972](https://github.com/woocommerce/woocommerce/pull/62972) * Tweak - Update PayPal Standard logo on classic checkout. [#63530](https://github.com/woocommerce/woocommerce/pull/63530) * Performance - Admin: Improved the performance of approved comment counting and reduced the number of SQL queries on the product reviews page. [#62805](https://github.com/woocommerce/woocommerce/pull/62805) * Performance - Admin: optimized SQL fetching dates for month filter on orders page [#63039](https://github.com/woocommerce/woocommerce/pull/63039) * Performance - Avoid extra queries in group product pages by priming the post cache. [#63267](https://github.com/woocommerce/woocommerce/pull/63267) * Performance - Customer data store: Optimize SQL queries to retrieve user-specific order statistics, including order count, last order, and total amount spent. [#62874](https://github.com/woocommerce/woocommerce/pull/62874) * Performance - Defer has_products() check to shutdown hook for bulk delete/trash products. [#63261](https://github.com/woocommerce/woocommerce/pull/63261) * Performance - Improved the performance of the product attributes lookup table synchronization (insert and delete operations). [#62748](https://github.com/woocommerce/woocommerce/pull/62748) * Performance - Integrate the `akismet_excluded_comment_types` hook from `Akismet::get_user_comments_approved()` to ensure order notes are excluded from the count. [#62913](https://github.com/woocommerce/woocommerce/pull/62913) * Performance - Orders: optimized a slow SQL query executed on the order confirmation page, checking for the existence of downloadable products. [#63043](https://github.com/woocommerce/woocommerce/pull/63043) * Performance - Performance: optimize attribute meta migration for variable products, addressing edge cases found in older setups. [#62966](https://github.com/woocommerce/woocommerce/pull/62966) * Performance - Performance: reintroduced the optimized and hardened version of the recent reviews widget. [#63224](https://github.com/woocommerce/woocommerce/pull/63224) * Performance - Performance: separate the transient deletion of legacy reports from the order cache refresh and execute these operations asynchronously. [#63118](https://github.com/woocommerce/woocommerce/pull/63118) * Performance - Prevent duplicate table names from accumulating in $wpdb->tables during multisite blog switching. [#60174](https://github.com/woocommerce/woocommerce/pull/60174) * Performance - Products: consolidate cache priming calls within product data stores. [#62999](https://github.com/woocommerce/woocommerce/pull/62999) * Performance - Products: defer publishing the 'product_add_publish' Tracks-event when importing products. [#62888](https://github.com/woocommerce/woocommerce/pull/62888) * Performance - Products: performance tweaks for data store SQLs setting stock and total sales. [#62930](https://github.com/woocommerce/woocommerce/pull/62930) * Performance - Products: reduced the number of SQL queries required to display upsell and related products on the product page. [#63006](https://github.com/woocommerce/woocommerce/pull/63006) * Performance - Products: reduce the number of SQL queries needed to construct product objects. [#62998](https://github.com/woocommerce/woocommerce/pull/62998) * Performance - Skip category term processing in product permalinks when structure doesn't include category placeholders [#63121](https://github.com/woocommerce/woocommerce/pull/63121) * Performance - The number of SQL queries on the orders pages (admin and my account) has been reduced to improve performance. [#62820](https://github.com/woocommerce/woocommerce/pull/62820) * Performance - The number of SQL queries required to fetch settings on admin pages has been reduced to improve performance. [#62853](https://github.com/woocommerce/woocommerce/pull/62853) * Performance - Use variation objects instead of arrays in ProductGallery block to avoid unnecessary data processing [#62792](https://github.com/woocommerce/woocommerce/pull/62792) * Performance - Use variation objects instead of arrays in ProductPrice block to avoid unnecessary data processing [#62797](https://github.com/woocommerce/woocommerce/pull/62797) * Performance - Use variation objects instead of arrays in VariationSelectorAttribute block to avoid unnecessary data processing [#62795](https://github.com/woocommerce/woocommerce/pull/62795) * Enhancement - Accessibility fixes for the Payment Settings page [#62841](https://github.com/woocommerce/woocommerce/pull/62841) * Enhancement - Add filter for modifying product attributes/downloads before reading & additional `extra_data` option [#62572](https://github.com/woocommerce/woocommerce/pull/62572) * Enhancement - Add lazy loading attribute to product image block. Introduce a new filter `woocommerce_product_image_loading_attr` to modify the loading attribute. [#62829](https://github.com/woocommerce/woocommerce/pull/62829) * Enhancement - Display a notice if Helper response from WooCommerce.com indicates the connection might have been removed on that end. [#62864](https://github.com/woocommerce/woocommerce/pull/62864) * Enhancement - Enable WC page header on reviews page [#63041](https://github.com/woocommerce/woocommerce/pull/63041) * Enhancement - Introduced a new filter `woocommerce_product_stock_default_amount` to allow change of the default stock amount. [#62678](https://github.com/woocommerce/woocommerce/pull/62678) * Enhancement - Introduce `cartItemScreenReaderPrice` checkout filter. [#62080](https://github.com/woocommerce/woocommerce/pull/62080) * Enhancement - Product Collection: improve taxonomies filters in inspector controls [#63025](https://github.com/woocommerce/woocommerce/pull/63025) * Enhancement - Updated Variation Selector Attribute Options block settings UI for improved clarity [#63038](https://github.com/woocommerce/woocommerce/pull/63038) * Enhancement - Update woocommerce_email_editor_integration_personalizer_context_data filter to allow overwrite values from core [#63231](https://github.com/woocommerce/woocommerce/pull/63231) * Enhancement - Use vanilla JS to replace order_notes after ajax updates [#60913](https://github.com/woocommerce/woocommerce/pull/60913) = 10.5.3 2026-03-02 = **WooCommerce** * Fix - Fix Store API batch endpoint path validation to prevent routing requests to non-Store-API endpoints. [#63501](https://github.com/woocommerce/woocommerce/pull/63501) = 10.5.2 2026-02-13 = **WooCommerce** * Fix - Fix variable products add-to-cart button appearing disabled in some stores [#63262](https://github.com/woocommerce/woocommerce/pull/63262) = 10.5.1 2026-02-10 = **WooCommerce** * Fix - Admin: revert to the previous version of the recent reviews widget, as errors have been reported in some setups. [#63195](https://github.com/woocommerce/woocommerce/pull/63195) * Fix - Fix issue that caused the shop page not to show up in Divi under certain circumstances [#63205](https://github.com/woocommerce/woocommerce/pull/63205) * Fix - Only disable add-to-cart button in variable products when wc-add-to-cart-variation is enqueued [#63194](https://github.com/woocommerce/woocommerce/pull/63194) * Enhancement - Add additional validation in the PayPal Standard shipping callback method. [#63193](https://github.com/woocommerce/woocommerce/pull/63193) = 10.5.0 2026-02-04 = **WooCommerce** * Fix - Add conditional checks to prevent the WooCommerce Accordion block from appearing in the block inserter on WordPress 6.9 and later. [#62626](https://github.com/woocommerce/woocommerce/pull/62626) * Fix - Added validation for PayPal Standard purchase unit amount in create-order requests to prevent errors when order totals are invalid. [#62385](https://github.com/woocommerce/woocommerce/pull/62385) * Fix - Adds an ID for the setup wizard, avoiding a deprecation error under PHP 8.5. [#62288](https://github.com/woocommerce/woocommerce/pull/62288) * Fix - Add support for collectable shipping methods in local pickup functionality [#62623](https://github.com/woocommerce/woocommerce/pull/62623) * Fix - Add the CallbackUtil class and fix get_price_hash for variations [#61779](https://github.com/woocommerce/woocommerce/pull/61779) * Fix - Add to Cart Button: use a11y utils from script module [#62014](https://github.com/woocommerce/woocommerce/pull/62014) * Fix - Compatibility with WP 6.9: improve the way WooCommerce block theme styles are enqueued [#62048](https://github.com/woocommerce/woocommerce/pull/62048) * Fix - Ensure block email content preview displays the correct item. [#62206](https://github.com/woocommerce/woocommerce/pull/62206) * Fix - Ensure discount fees are included in the order subtotal calculation on the admin order view [#62454](https://github.com/woocommerce/woocommerce/pull/62454) * Fix - Ensure guest orders cannot be read by customers without providing the key and billing address. [#62559](https://github.com/woocommerce/woocommerce/pull/62559) * Fix - Fix: order being incorrectly changed to Completed [#62191](https://github.com/woocommerce/woocommerce/pull/62191) * Fix - Fix: Store API: Orders endpoint now returns an empty array for the `variation` field on simple products, matching cart endpoint behavior. [#62162](https://github.com/woocommerce/woocommerce/pull/62162) * Fix - Fix a bug where Preact warns in development about inconsistent rendering between SSR content and client. [#62155](https://github.com/woocommerce/woocommerce/pull/62155) * Fix - Fix a bug where the `Dimension` block attribute of Mini-Cart Contents was not respected. [#62384](https://github.com/woocommerce/woocommerce/pull/62384) * Fix - Fix Analytics Products report to support product types extending WC_Product_Variable by checking variations array as fallback. [#62648](https://github.com/woocommerce/woocommerce/pull/62648) * Fix - Fix bottom margin deprecation notices for controls in the Product Collection block. [#62705](https://github.com/woocommerce/woocommerce/pull/62705) * Fix - Fix decoding attribute option name [#62562](https://github.com/woocommerce/woocommerce/pull/62562) * Fix - Fixed enqueuing of the whole `wordpress/editor` script where unnecessary. [#62438](https://github.com/woocommerce/woocommerce/pull/62438) * Fix - Fixed order creation failures in PayPal Standard when items contain negative amounts or fractional quantities by omitting the item breakdown in these cases, allowing orders to proceed with the total amount only. [#62576](https://github.com/woocommerce/woocommerce/pull/62576) * Fix - Fixed REST API handling of attribute names containing special characters when creating product variations [#61939](https://github.com/woocommerce/woocommerce/pull/61939) * Fix - Fixes breadcrumbs sometimes throwing errors when categories inconsistencies happened in the Database. [#62210](https://github.com/woocommerce/woocommerce/pull/62210) * Fix - Fixes for Migrator CLI [#61453](https://github.com/woocommerce/woocommerce/pull/61453) * Fix - Fix fatal error when viewing old orders with legacy tax data format in order item metadata. The fix preserves tax values and attempts to infer the tax rate ID from order context for better backwards compatibility. Applies to product, shipping, and fee order items. [#62352](https://github.com/woocommerce/woocommerce/pull/62352) * Fix - Fix Import Status Bar UI overlap with filter dropdowns and add loading state feedback [#62675](https://github.com/woocommerce/woocommerce/pull/62675) * Fix - Fix intermittent blank shop page when WordPress resolves by `slug` instead of `page ID`. [#61788](https://github.com/woocommerce/woocommerce/pull/61788) * Fix - Fix minicart focus when multiple minicarts are in the page [#62494](https://github.com/woocommerce/woocommerce/pull/62494) * Fix - Fix minicart prices formatted with too many decimals [#62355](https://github.com/woocommerce/woocommerce/pull/62355) * Fix - Fix missing order attribution elements when checkout page is pre-rendered. [#62609](https://github.com/woocommerce/woocommerce/pull/62609) * Fix - Fix PHP warning undefined array key "post_type". [#55354](https://github.com/woocommerce/woocommerce/pull/55354) * Fix - Fix product permalinks to use deepest category instead of highest parent term ID when product is assigned to multiple categories. [#62321](https://github.com/woocommerce/woocommerce/pull/62321) * Fix - Fix REST API V4 country/state validation to accept state codes with country prefixes (e.g., DE:DE-BY) for compatibility with V3 API format. [#62495](https://github.com/woocommerce/woocommerce/pull/62495) * Fix - Fix scheduled sales starting/ending at wrong times by using per-product Action Scheduler events instead of relying solely on daily cron. [#62115](https://github.com/woocommerce/woocommerce/pull/62115) * Fix - Fix tax calculation for manual orders when using fixed total price mode (woocommerce_adjust_non_base_location_prices filter). [#62271](https://github.com/woocommerce/woocommerce/pull/62271) * Fix - Fix Tracks events being rejected when array properties are passed by automatically converting arrays to valid formats [#61729](https://github.com/woocommerce/woocommerce/pull/61729) * Fix - Fix using null as array index warning in variable products data store [#62452](https://github.com/woocommerce/woocommerce/pull/62452) * Fix - Fix variation date_modified not updating when toggling POS visibility on variable products. [#62827](https://github.com/woocommerce/woocommerce/pull/62827) * Fix - Fix warning when rendering subcategory thumbnails if the thumbnail attachment lookup fails. [#62198](https://github.com/woocommerce/woocommerce/pull/62198) * Fix - Flat rate: allow empty main cost so class-only rates work again [#61313](https://github.com/woocommerce/woocommerce/pull/61313) * Fix - Handles authorization already captured errors on PayPal Standard by ignoring the error and properly setting the PayPal order status meta to `CAPTURED`. [#62582](https://github.com/woocommerce/woocommerce/pull/62582) * Fix - Improved Shipping Method block alignment and mobile responsiveness when shipping method titles are long. [#62610](https://github.com/woocommerce/woocommerce/pull/62610) * Fix - Limit ProductControl component to loading a maximum of 25 variations at once [#61853](https://github.com/woocommerce/woocommerce/pull/61853) * Fix - Migrate BlocksSharedState to a class with static methods to fix a bug where state was duplicated between block instances. [#62168](https://github.com/woocommerce/woocommerce/pull/62168) * Fix - Navigation store: don't call deprecated onHistoryChange [#62049](https://github.com/woocommerce/woocommerce/pull/62049) * Fix - Prevent an error that occurred when duplicating a product if the duplicate's SKU matched the SKU of a trashed product [#62628](https://github.com/woocommerce/woocommerce/pull/62628) * Fix - Prevent delay/jarring rendering of pickup location in checkout block. [#61852](https://github.com/woocommerce/woocommerce/pull/61852) * Fix - Prevent errors when plugins incorrectly call wc_add_notice before session is initialized [#62310](https://github.com/woocommerce/woocommerce/pull/62310) * Fix - Prevent fatal errors when retrieving orders with deleted products on Store API [#62074](https://github.com/woocommerce/woocommerce/pull/62074) * Fix - Prevent Select2 styles from leaking into other plugins [#61956](https://github.com/woocommerce/woocommerce/pull/61956) * Fix - Product Collection: Remove unnecessary margin-top when there's no store notices displayed [#62144](https://github.com/woocommerce/woocommerce/pull/62144) * Fix - Product Gallery: Fix arrows gap on the frontend [#62261](https://github.com/woocommerce/woocommerce/pull/62261) * Fix - Product Gallery: Fix variation image not displayed when it's the same as the product main image [#62803](https://github.com/woocommerce/woocommerce/pull/62803) * Fix - Product Gallery: improve layout of full page gallery [#62172](https://github.com/woocommerce/woocommerce/pull/62172) * Fix - Remove unnecessary data from shipping zone objects [#62157](https://github.com/woocommerce/woocommerce/pull/62157) * Fix - Remove usage of feature_is_enabled in ProductVersionStringInvalidator::init [#62665](https://github.com/woocommerce/woocommerce/pull/62665) * Fix - Respect “Sold individually” for variable products in Order Again; normalize variation attributes, enforce qty=1, prevent duplicate variations; add unit test. [#61344](https://github.com/woocommerce/woocommerce/pull/61344) * Fix - Stores the PayPal Standard order status upon creation and skips capture when payer action is required. [#62433](https://github.com/woocommerce/woocommerce/pull/62433) * Fix - Styling and copy improvements to Launch Your Store screen [#62254](https://github.com/woocommerce/woocommerce/pull/62254) * Fix - Support embeds in V4 order endpoint when using plain permalinks. [#62366](https://github.com/woocommerce/woocommerce/pull/62366) * Fix - Update the email content block to display the correct information. [#62010](https://github.com/woocommerce/woocommerce/pull/62010) * Fix - Update woocommerce_block_asset_resource_hints to work per-site, rather than across the network on multisite instances [#62211](https://github.com/woocommerce/woocommerce/pull/62211) * Fix - Use WordPress core Accordion block in Product Details block for WP 6.9+, with fallback for older versions. [#62339](https://github.com/woocommerce/woocommerce/pull/62339) * Fix - Ensure there's no deprecation warning about deprecated feature flags when plugins are activated. [#62939](https://github.com/woocommerce/woocommerce/pull/62939) * Fix - Prevent PHP warnings when accessing templates without content [#62909](https://github.com/woocommerce/woocommerce/pull/62909) * Fix - Fix fatal error when third-party plugins instantiate REST controllers before WooCommerce is fully initialized. [#63069](https://github.com/woocommerce/woocommerce/pull/63069) * Add - Add a basic RestApiCache trait [#61798](https://github.com/woocommerce/woocommerce/pull/61798) * Add - Add ability to hide products from Point of Sale. [#62534](https://github.com/woocommerce/woocommerce/pull/62534) * Add - Add analytics-scheduled-import feature flag to control scheduled analytics imports feature [#62149](https://github.com/woocommerce/woocommerce/pull/62149) * Add - Add analytics import mode setting to Settings API [#62169](https://github.com/woocommerce/woocommerce/pull/62169) * Add - Add analytics import status and manual trigger endpoints [#62196](https://github.com/woocommerce/woocommerce/pull/62196) * Add - Add a new controller for generating a product feed for the Woo mobile app. [#62313](https://github.com/woocommerce/woocommerce/pull/62313) * Add - Add block email template for Fulfillment emails. [#62146](https://github.com/woocommerce/woocommerce/pull/62146) * Add - Add configurable clone mode to WC_Data to support both duplication and caching workflows while maintaining backward compatibility. [#61591](https://github.com/woocommerce/woocommerce/pull/61591) * Add - Add currency data to the order item response in REST API V4 [#61415](https://github.com/woocommerce/woocommerce/pull/61415) * Add - Add date status and manual update UI to Analytics pages [#62276](https://github.com/woocommerce/woocommerce/pull/62276) * Add - Add default scheduled import option for new installations [#62331](https://github.com/woocommerce/woocommerce/pull/62331) * Add - Add DELETE endpoint for shipping zone methods in REST API v4. [#62015](https://github.com/woocommerce/woocommerce/pull/62015) * Add - Add DELETE endpoint for shipping zones in REST API v4. [#62016](https://github.com/woocommerce/woocommerce/pull/62016) * Add - Add import mode control to Analytics settings, allowing users to choose between scheduled (every 12 hours) and immediate updates [#62187](https://github.com/woocommerce/woocommerce/pull/62187) * Add - Add password manager support to password fields in my account screen. [#62625](https://github.com/woocommerce/woocommerce/pull/62625) * Add - Add REST API endpoint `/wc/v4/fulfillments/providers` to expose shipping provider information including labels, icons, and tracking URLs for CIAB Next Admin integration. [#61910](https://github.com/woocommerce/woocommerce/pull/61910) * Add - Adds Blaze as a default marketing channel [#62160](https://github.com/woocommerce/woocommerce/pull/62160) * Add - Add scheduled updates promotion inbox note [#62226](https://github.com/woocommerce/woocommerce/pull/62226) * Add - Add scheduled updates promotion notices [#62225](https://github.com/woocommerce/woocommerce/pull/62225) * Add - Add support for filtering product categories by parent level in the Store API. [#62447](https://github.com/woocommerce/woocommerce/pull/62447) * Add - Add support to Hydration class to get store API responses with url and query params. [#62057](https://github.com/woocommerce/woocommerce/pull/62057) * Add - Add variation_id in error data for `order_item_product_invalid_variation_id` errors. [#62240](https://github.com/woocommerce/woocommerce/pull/62240) * Add - Add WordPress environment type to site status report. [#62458](https://github.com/woocommerce/woocommerce/pull/62458) * Add - Add `woocommerce_email_content_post_data` filter hook for customizing email template post data before creation. [#62512](https://github.com/woocommerce/woocommerce/pull/62512) * Add - Breadcrumbs: Set preferred term in core Breadcrumbs block to keep compatibility with Woo's block [#62746](https://github.com/woocommerce/woocommerce/pull/62746) * Add - Implement cache control headers for REST API responses [#61476](https://github.com/woocommerce/woocommerce/pull/61476) * Add - Introduce Product Object feature for improved performance. [#62041](https://github.com/woocommerce/woocommerce/pull/62041) * Add - Make refunds embeddable and payment gateway settings embeddable in Order V4 [#61463](https://github.com/woocommerce/woocommerce/pull/61463) * Add - New block for the email editor that lets users add a coupon code in their emails * Add - Product Gallery: add active Thumbnails outline style to existing overlay [#62253](https://github.com/woocommerce/woocommerce/pull/62253) * Add - Product Gallery Large Image: allow inserting other blocks [#62030](https://github.com/woocommerce/woocommerce/pull/62030) * Add - Set Product Categories as the preferred taxonomy for the Breadcrumbs block [#62283](https://github.com/woocommerce/woocommerce/pull/62283) * Update - Add additional customization to RestApiCache trait [#61838](https://github.com/woocommerce/woocommerce/pull/61838) * Update - Add caching and cache control headers for product REST API responses [#62258](https://github.com/woocommerce/woocommerce/pull/62258) * Update - Add db update to autoload frequently used options [#62036](https://github.com/woocommerce/woocommerce/pull/62036) * Update - Add HTTP headers to cached outputs in RestApiCache [#61931](https://github.com/woocommerce/woocommerce/pull/61931) * Update - Add N-Genius Online to Recommended Payment Partners [#62807](https://github.com/woocommerce/woocommerce/pull/62807) * Update - Add prefixes to checkout autocomplete attributes to help with Safari autofill [#62513](https://github.com/woocommerce/woocommerce/pull/62513) * Update - Add relevant hooks tracking for cached outputs in RestApiCache [#61878](https://github.com/woocommerce/woocommerce/pull/61878) * Update - Add REST API backend caching and cache control headers configuration [#61986](https://github.com/woocommerce/woocommerce/pull/61986) * Update - Adds a woocommerce_shipping_tax_class filter to allow dynamically calculating the shipping tax class. [#62040](https://github.com/woocommerce/woocommerce/pull/62040) * Update - Allow “Email FROM” to automatically use the “Store Title” as the value unless the merchant manually changes it. [#62369](https://github.com/woocommerce/woocommerce/pull/62369) * Update - Blocks Checkout design improvements for multiple shipping packages. [#61625](https://github.com/woocommerce/woocommerce/pull/61625) * Update - Customize Your Store: remove unnecessary code upon simplifying the journey [#62161](https://github.com/woocommerce/woocommerce/pull/62161) * Update - Customize Your Store: Simplify the flow [#62158](https://github.com/woocommerce/woocommerce/pull/62158) * Update - Deprecate the marketplace feature flag - the in-app marketplace is now always enabled and the feature check is no longer necessary. [#62264](https://github.com/woocommerce/woocommerce/pull/62264) * Update - Ensure rewrite rules are updated whenever new block email templates are generated. [#62117](https://github.com/woocommerce/woocommerce/pull/62117) * Update - Product Gallery: Call the block stable [#62278](https://github.com/woocommerce/woocommerce/pull/62278) * Update - Product Gallery: Rename Large Image block to Viewer [#62163](https://github.com/woocommerce/woocommerce/pull/62163) * Update - Reduce option loading in Brands code. [#62000](https://github.com/woocommerce/woocommerce/pull/62000) * Update - Reduce options queried on admin page loads. [#62033](https://github.com/woocommerce/woocommerce/pull/62033) * Update - Refactor Add to Cart + Options grouped product template part to decrease the gap between quantity selector and product name [#62702](https://github.com/woocommerce/woocommerce/pull/62702) * Update - Refactored the address update functionality of PayPal Standard with improved status tracking to prevent duplicate requests. [#62418](https://github.com/woocommerce/woocommerce/pull/62418) * Update - Remove database option fetch for legacy coupon menu display preference. [#62053](https://github.com/woocommerce/woocommerce/pull/62053) * Update - Update hooks alternatives documentation [#62263](https://github.com/woocommerce/woocommerce/pull/62263) * Update - Update WordPress Abilities API to v0.4.0 [#62027](https://github.com/woocommerce/woocommerce/pull/62027) * Update - Re-add the AccessiblePrivateMethods trait [#63088](https://github.com/woocommerce/woocommerce/pull/63088) * Dev - Add @template annotations to DI container for better PHPStan type inference. [#62301](https://github.com/woocommerce/woocommerce/pull/62301) * Dev - Add a checkbox for automatic milestone assignment on pull requests [#62063](https://github.com/woocommerce/woocommerce/pull/62063) * Dev - Add cache invalidation interface and product invalidator [#61613](https://github.com/woocommerce/woocommerce/pull/61613) * Dev - Add E2E tests for analytics scheduled updates feature [#62332](https://github.com/woocommerce/woocommerce/pull/62332) * Dev - Added deprecation notices for deprecated methods in 'WC_Gateway_Paypal_Helper' and 'WC_Gateway_Paypal_Notices' classes. [#62645](https://github.com/woocommerce/woocommerce/pull/62645) * Dev - Add mechanism to detect scripts not declaring blocks dependencies [#62229](https://github.com/woocommerce/woocommerce/pull/62229) * Dev - Add performance guidance to WC_Product_Variable::get_available_variations() docblock [#62715](https://github.com/woocommerce/woocommerce/pull/62715) * Dev - Add PHPStan analyze support and Github action to run on each PR. [#62064](https://github.com/woocommerce/woocommerce/pull/62064) * Dev - Add PHPStan conditional return type to WC_Product_Variable::get_available_variations(). [#62656](https://github.com/woocommerce/woocommerce/pull/62656) * Dev - CI: Update the latest PHP version in use to 8.5 [#62650](https://github.com/woocommerce/woocommerce/pull/62650) * Dev - Deprecate orders v2 related methods in WC_Gateway_Paypal_Request class in favor of the Automattic\WooCommerce\Gateways\PayPal\Request class. [#62640](https://github.com/woocommerce/woocommerce/pull/62640) * Dev - Deprecate WC_Gateway_Paypal_Buttons class in favor of Automattic\WooCommerce\Gateways\PayPal\Buttons class. [#62633](https://github.com/woocommerce/woocommerce/pull/62633) * Dev - Deprecate WC_Gateway_Paypal_Constants class in favor of Automattic\WooCommerce\Gateways\PayPal\Constants. [#62595](https://github.com/woocommerce/woocommerce/pull/62595) * Dev - Deprecate WC_Gateway_Paypal_Helper class in favor of Automattic\WooCommerce\Gateways\PayPal\Helper. [#62596](https://github.com/woocommerce/woocommerce/pull/62596) * Dev - Deprecate WC_Gateway_Paypal_Notices class in favor of Automattic\WooCommerce\Gateways\PayPal\Notices class. [#62599](https://github.com/woocommerce/woocommerce/pull/62599) * Dev - Deprecate WC_Gateway_Paypal_Transact_Account_Manager class in favor of Automattic\WooCommerce\Gateways\PayPal\TransactAccountManager class. [#62624](https://github.com/woocommerce/woocommerce/pull/62624) * Dev - Deprecate WC_Gateway_Paypal_Webhook_Handler class in favor of Automattic\WooCommerce\Gateways\PayPal\WebhookHandler class. [#62630](https://github.com/woocommerce/woocommerce/pull/62630) * Dev - Fix analytics overview flaky tests [#62244](https://github.com/woocommerce/woocommerce/pull/62244) * Dev - Fix flaky mini-cart e2e test by handling page closure during localStorage cleanup [#61950](https://github.com/woocommerce/woocommerce/pull/61950) * Dev - Introduces new constants to store PayPal Standard order meta keys. [#62635](https://github.com/woocommerce/woocommerce/pull/62635) * Dev - Pass input element as context in quantity selector [#62045](https://github.com/woocommerce/woocommerce/pull/62045) * Dev - Reduce PHPStan level from 9 to 8 to improve developer productivity while maintaining strong type safety [#62387](https://github.com/woocommerce/woocommerce/pull/62387) * Dev - Remove skipped E2E tests for WordPress versions <= 6.7 [#62391](https://github.com/woocommerce/woocommerce/pull/62391) * Dev - Remove the AccessiblePrivateMethods trait [#62200](https://github.com/woocommerce/woocommerce/pull/62200) * Dev - Update AI backend skill to always be invoked before writing tests [#62531](https://github.com/woocommerce/woocommerce/pull/62531) * Dev - [Experimental] Add to Cart + Options: improve quantity selection by removing imperative DOM manipulation. [#61821](https://github.com/woocommerce/woocommerce/pull/61821) * Dev - Update PayPal REST API controllers to use new namespaced classes instead of deprecated WC_Gateway_Paypal_* classes. [#63040](https://github.com/woocommerce/woocommerce/pull/63040) * Tweak - - Includes a source parameter for requests to the `/update-check` and `/subscriptions` endpoints on WooCommerce.com if the request originates from the Refresh button on My Subscriptions - Fix source parameter for other requests to the `/subscriptions` endpoint originating from the My Subscriptions page [#62674](https://github.com/woocommerce/woocommerce/pull/62674) * Tweak - Add a hook enabling Woo extensions to set the Personalizer context for their personalization tags. [#62337](https://github.com/woocommerce/woocommerce/pull/62337) * Tweak - Add deprecated tag to wc_enqueue_js(). [#62219](https://github.com/woocommerce/woocommerce/pull/62219) * Tweak - Add null-check to cart handler--prevents accessing cart if not initialized [#62644](https://github.com/woocommerce/woocommerce/pull/62644) * Tweak - Auto-paginate variation loading in the `ProductControl` component. [#62114](https://github.com/woocommerce/woocommerce/pull/62114) * Tweak - Clarify account creation setting description [#60404](https://github.com/woocommerce/woocommerce/pull/60404) * Tweak - Improved the translation string for order headings in the dashboard orders widget. [#62362](https://github.com/woocommerce/woocommerce/pull/62362) * Tweak - Improve UX for tax-inclusive pricing configuration by adding validation notice and clearer setting description when base tax rate is not configured. [#61471](https://github.com/woocommerce/woocommerce/pull/61471) * Tweak - Moved package_id and package_name generation from CartController to WC_Cart::get_shipping_packages() method to ensure these fields are always present in shipping packages, regardless of how they are accessed. [#62393](https://github.com/woocommerce/woocommerce/pull/62393) * Performance - Add index to user_email within woocommerce_downloadable_product_permissions to improve performance [#62101](https://github.com/woocommerce/woocommerce/pull/62101) * Performance - Add to Cart + Options: Avoid loading unnecessary scripts when rendering 3rd-party product types [#62681](https://github.com/woocommerce/woocommerce/pull/62681) * Performance - Cache tax display option to avoid repeated get_option() calls in variation price loop [#61782](https://github.com/woocommerce/woocommerce/pull/61782) * Performance - Fix: Set expiration time for filter data cache to avoid autoloading all cache data [#62575](https://github.com/woocommerce/woocommerce/pull/62575) * Performance - Implement batched pixel requests for improved performance when sending tracking events [#62461](https://github.com/woocommerce/woocommerce/pull/62461) * Performance - Optimize ProductImage block to avoid unnecessary gallery image calculations. [#62107](https://github.com/woocommerce/woocommerce/pull/62107) * Performance - Performance: clean up filter data transients cache along with the product/shop transients cache. [#62591](https://github.com/woocommerce/woocommerce/pull/62591) * Performance - Prime caches before fetching child products in grouped product price calculations [#61784](https://github.com/woocommerce/woocommerce/pull/61784) * Performance - Recent Reviews widget: improve widget performance. [#62680](https://github.com/woocommerce/woocommerce/pull/62680) * Performance - Rely on case-insensitive collation when looking coupon codes up. [#62145](https://github.com/woocommerce/woocommerce/pull/62145) * Performance - Replace get_available_variations() with get_visible_children() and get_price() in product-image.php template for better performance. [#62777](https://github.com/woocommerce/woocommerce/pull/62777) * Enhancement - Add missing UTM Parameters to order attribution [#60397](https://github.com/woocommerce/woocommerce/pull/60397) * Enhancement - Disable add to cart button in variable products until the script has loaded [#62631](https://github.com/woocommerce/woocommerce/pull/62631) * Enhancement - Eliminate hard-coded 'grouped' product handling in frontend of quantity selector block [#61496](https://github.com/woocommerce/woocommerce/pull/61496) * Enhancement - Show tax suffix on new line in order email totals [#62059](https://github.com/woocommerce/woocommerce/pull/62059) * Enhancement - Updated wc-analytics/customers API route to include location filtering (country and state), and user type filtering (registered or guest) [#62267](https://github.com/woocommerce/woocommerce/pull/62267) * Enhancement - Update WooEmailTemplate to simplify style application. [#62051](https://github.com/woocommerce/woocommerce/pull/62051) = 10.4.3 2025-12-22 = **WooCommerce** * Fix - Ensure guest orders cannot be read by customers without providing the key and billing address. [#62557](https://github.com/woocommerce/woocommerce/pull/62557) * Fix - Fix undo button after cart item removal in the cart shortcode [#62529](https://github.com/woocommerce/woocommerce/pull/62529) * Fix - Improve handling of order modified date during HPOS sync on read to prevent infinite loops. [#62532](https://github.com/woocommerce/woocommerce/pull/62532) * Update - Add automatic currency transition from BGN to EUR for Bulgaria effective January 1, 2026 [#62478](https://github.com/woocommerce/woocommerce/pull/62478) = 10.4.2 2025-12-12 = **WooCommerce** * Fix - Product Editor: Remove editor mode and unused rich text components [#62428](https://github.com/woocommerce/woocommerce/pull/62428) = 10.4.1 2025-12-12 = **WooCommerce** * Fix - Fix cached API request in iAPI cart store [#62416](https://github.com/woocommerce/woocommerce/pull/62416) * Fix - Prevent excessive debug logging from the Payments Settings page. [#62404](https://github.com/woocommerce/woocommerce/pull/62404) * Fix - Prevent notice as_unschedule_all_actions() was called before the Action Scheduler data store was initialized [#62419](https://github.com/woocommerce/woocommerce/pull/62419) * Fix - Revert to previous sync-on-read logic to prevent unnecessary writes when HPOS and compat mode are enabled. [#62408](https://github.com/woocommerce/woocommerce/pull/62408) = 10.4.0 2025-12-10 = **WooCommerce** * Fix - Adds validation for currency support on PayPal Standard based on the official PayPal currency table for the Orders V2 API. [#62032](https://github.com/woocommerce/woocommerce/pull/62032) * Fix - Add to Cart + Options: add up quantities when the same product is in the cart multiple times as different cart items [#61445](https://github.com/woocommerce/woocommerce/pull/61445) * Fix - Add to Cart + Options: hide Product Quantity block if its inner input is hidden [#61796](https://github.com/woocommerce/woocommerce/pull/61796) * Fix - Add to Cart + Options: hide the Product Quantity and Add to Cart Button blocks in out of stock variations [#61520](https://github.com/woocommerce/woocommerce/pull/61520) * Fix - Add to Cart + Options: improve editor display for users without permissions to edit the template parts [#61663](https://github.com/woocommerce/woocommerce/pull/61663) * Fix - Add to Cart + Options: make grouped product inner blocks show sample data when the store has no products [#61349](https://github.com/woocommerce/woocommerce/pull/61349) * Fix - Add to Cart + Options: support the Product block when a variation is selected [#61639](https://github.com/woocommerce/woocommerce/pull/61639) * Fix - Align Payment Settings header size with other tabs under WC Settings [#61671](https://github.com/woocommerce/woocommerce/pull/61671) * Fix - All Products: Prevent image interaction in the editor [#61951](https://github.com/woocommerce/woocommerce/pull/61951) * Fix - Coerce order total into float when empty string is provided in setter [#61257](https://github.com/woocommerce/woocommerce/pull/61257) * Fix - Consistently format empty strings in decimal format utils [#59368](https://github.com/woocommerce/woocommerce/pull/59368) * Fix - Correctly handle deleted meta in legacy > HPOS sync. [#61193](https://github.com/woocommerce/woocommerce/pull/61193) * Fix - Ensure checkout/place order logger respects log level threshold [#61842](https://github.com/woocommerce/woocommerce/pull/61842) * Fix - Ensure legacy > HPOS sync correctly handles deleted orders deleted while sync was off. [#61290](https://github.com/woocommerce/woocommerce/pull/61290) * Fix - Featured Product block: Fixed default color of title inner block to have better contrast. [#61554](https://github.com/woocommerce/woocommerce/pull/61554) * Fix - Fix: block notice template version. [#61421](https://github.com/woocommerce/woocommerce/pull/61421) * Fix - Fix: order metadata being deleted when order logs were deleted [#61635](https://github.com/woocommerce/woocommerce/pull/61635) * Fix - Fix Abilities API integration tests for WordPress 6.9+ compatibility with backward compatibility for earlier versions. [#61560](https://github.com/woocommerce/woocommerce/pull/61560) * Fix - Fix a bug preventing UAE and Singapore merchants from onboarding in WooPayments. [#61448](https://github.com/woocommerce/woocommerce/pull/61448) * Fix - Fix CES edit survey not displaying [#61660](https://github.com/woocommerce/woocommerce/pull/61660) * Fix - Fix COGS calculation for product order items [#61694](https://github.com/woocommerce/woocommerce/pull/61694) * Fix - Fixes a notice with agentic commerce webhooks due to checking whether the feature was enabled before init. [#61424](https://github.com/woocommerce/woocommerce/pull/61424) * Fix - Fixes flat rate shipping cost input locale formatting issue where comma decimal separator is replaced with a dot resulting in incorrect display and saving at later times. [#61382](https://github.com/woocommerce/woocommerce/pull/61382) * Fix - Fix floating-point precision bug in price conversion where prices like 10.04 would display as 10.03. [#61377](https://github.com/woocommerce/woocommerce/pull/61377) * Fix - Fix isDiscount check for order summary to fix display issues when product is discounted to 0 [#61256](https://github.com/woocommerce/woocommerce/pull/61256) * Fix - Fix issue in where pagination with the modified orderby was causing duplicates in Variation and Product endpoints. [#61410](https://github.com/woocommerce/woocommerce/pull/61410) * Fix - Fix issue where tax reports where showing duplicate rows for orders with multiple tax rates. [#61400](https://github.com/woocommerce/woocommerce/pull/61400) * Fix - Fix issue where updating the woocommerce_default_date_range option was saving stringified undefined values. [#61971](https://github.com/woocommerce/woocommerce/pull/61971) * Fix - Fix keyboard navigation in iAPI minicart [#61716](https://github.com/woocommerce/woocommerce/pull/61716) * Fix - Fix Mini-Cart footer to show only enabled calculation types (shipping, taxes, discounts) instead of always showing all three. [#61861](https://github.com/woocommerce/woocommerce/pull/61861) * Fix - Fix missing data in certain WooCommerce blocks inside the Product block when editing as an author [#61718](https://github.com/woocommerce/woocommerce/pull/61718) * Fix - Fix order summary description text overflow in checkout [#61207](https://github.com/woocommerce/woocommerce/pull/61207) * Fix - Fix PHP notice for indirect modification of overloaded property in WC_Tracks [#61362](https://github.com/woocommerce/woocommerce/pull/61362) * Fix - Fix undefined array key warning when firing woocommerce_variation_prices [#61472](https://github.com/woocommerce/woocommerce/pull/61472) * Fix - Flush subscription usage cache when WooCommerce.com license is activated [#61606](https://github.com/woocommerce/woocommerce/pull/61606) * Fix - For HPOS sync-on-read, ensure metadata is fully read from the CPT datastore. [#61293](https://github.com/woocommerce/woocommerce/pull/61293) * Fix - Hide PayPal Standard for orders v2 from the checkout page when the email is empty in the settings. [#62083](https://github.com/woocommerce/woocommerce/pull/62083) * Fix - iAPI Mini Cart - Fix a bug where attributes were not rendered correctly due to incorrect key. [#61764](https://github.com/woocommerce/woocommerce/pull/61764) * Fix - Improve accessibility of emails by setting the aria-role of layout tables to presentation. [#60447](https://github.com/woocommerce/woocommerce/pull/60447) * Fix - Normalize the URLs in PayPal Standard request data to prevent errors due to unsupported URL format in PayPal. [#62082](https://github.com/woocommerce/woocommerce/pull/62082) * Fix - Patterns: fix duplicated product image in Product Gallery pattern [#61953](https://github.com/woocommerce/woocommerce/pull/61953) * Fix - Prevent accidental syncing of order with placeholder post when HPOS compat mode is enabled. [#61381](https://github.com/woocommerce/woocommerce/pull/61381) * Fix - Prevent core-provided payment gateways from showing deactivation actions on the Payments settings page. [#61700](https://github.com/woocommerce/woocommerce/pull/61700) * Fix - Prevent rendering Mini Cart Footer block when it's hidden [#61828](https://github.com/woocommerce/woocommerce/pull/61828) * Fix - Prevent saving the dummy products in email preview [#61810](https://github.com/woocommerce/woocommerce/pull/61810) * Fix - Prevent unnecessary querying of non-existent options on the admin. [#61818](https://github.com/woocommerce/woocommerce/pull/61818) * Fix - Product Collection: improve accessibility of carousel layout [#61780](https://github.com/woocommerce/woocommerce/pull/61780) * Fix - Product Collection: show 'Preview' label when editing the Products by Brand template [#61401](https://github.com/woocommerce/woocommerce/pull/61401) * Fix - Product Filter: Fix Canonical URL encoding issue [#61766](https://github.com/woocommerce/woocommerce/pull/61766) * Fix - Product Filter: support unicode value [#61769](https://github.com/woocommerce/woocommerce/pull/61769) * Fix - Product Filters: add support for databases using ANSI_QUOTES [#61630](https://github.com/woocommerce/woocommerce/pull/61630) * Fix - Product Gallery: fix mobile layout issue in editor [#61531](https://github.com/woocommerce/woocommerce/pull/61531) * Fix - Redirect payments-related tasks to the Payments Settings page. [#62012](https://github.com/woocommerce/woocommerce/pull/62012) * Fix - Remove glboal event handler for a['role=button'] and assign specific ones to elements that needs it [#61506](https://github.com/woocommerce/woocommerce/pull/61506) * Fix - Remove link to product page when already viewing the product in missing variation ID error message [#61532](https://github.com/woocommerce/woocommerce/pull/61532) * Fix - Remove unnecessary animation from Add to Cart + Options block skeleton [#61597](https://github.com/woocommerce/woocommerce/pull/61597) * Fix - Remove `Dinero` dependency and use always `raw_prices` [#61233](https://github.com/woocommerce/woocommerce/pull/61233) * Fix - Replace foreign since variable. [#61419](https://github.com/woocommerce/woocommerce/pull/61419) * Fix - Return correct singular version for "Adresses" in My Account Menu Item [#61667](https://github.com/woocommerce/woocommerce/pull/61667) * Fix - Show Cart and Checkout blocks when minicart footer is empty [#61954](https://github.com/woocommerce/woocommerce/pull/61954) * Fix - Support both WordPress 6.9+ and pre-6.9 action hook names for Abilities API registration to ensure compatibility across WordPress versions. [#61562](https://github.com/woocommerce/woocommerce/pull/61562) * Fix - Support same item with different props in the iAPI minicart. [#61542](https://github.com/woocommerce/woocommerce/pull/61542) * Fix - This PR fixes the bug where Customer Analytics are not getting populated for DBs with ANSI_QUOTES enabled [#61212](https://github.com/woocommerce/woocommerce/pull/61212) * Fix - Trigger order status transition hooks regardless of dirty state. (Reverts #46887) [#61459](https://github.com/woocommerce/woocommerce/pull/61459) * Fix - Trigger term recounts for products after visibility terms change instead of after product saving. [#61457](https://github.com/woocommerce/woocommerce/pull/61457) * Fix - Use email $template_base when generating initial templates [#61305](https://github.com/woocommerce/woocommerce/pull/61305) * Fix - Use event handler to reload page, eliminates deprecated warning in checkout block. [#61498](https://github.com/woocommerce/woocommerce/pull/61498) * Fix - Fix fatal error in needs_shipping() when order contains permanently deleted product [#62103](https://github.com/woocommerce/woocommerce/pull/62103) * Fix - Fix PHP 8.4 fatal error in WooCommerce Helper updater when transient contains malformed data [#62094](https://github.com/woocommerce/woocommerce/pull/62094) * Fix - Restore original HPOS status filtering behavior to exclude internal order statuses when status='any', matching post-based storage behavior. [#62106](https://github.com/woocommerce/woocommerce/pull/62106) * Fix - Fix issue in which regular Checkout requests were getting counted toward rate limit if rate limiting is enabled. [#62318](https://github.com/woocommerce/woocommerce/pull/62318) * Fix - Fix Mini Cart showing undefined product title on slow network connections. [#62275](https://github.com/woocommerce/woocommerce/pull/62275) * Fix - Fix PayPal webhook endpoint URL to use home URL instead of site URL. [#62199](https://github.com/woocommerce/woocommerce/pull/62199) * Fix - Fix text visibility in select inputs [#62292](https://github.com/woocommerce/woocommerce/pull/62292) * Fix - Revert payment options icon selector change [#62291](https://github.com/woocommerce/woocommerce/pull/62291) * Add - Add Agentic Commerce checkout `complete` endpoint and `agentic_commerce` payment gateway feature support. [#61271](https://github.com/woocommerce/woocommerce/pull/61271) * Add - Add an entity versions cache [#61600](https://github.com/woocommerce/woocommerce/pull/61600) * Add - Add a new line when concatenating translations in a script for the Mini-Cart block [#61923](https://github.com/woocommerce/woocommerce/pull/61923) * Add - Add BlockEmailRenderer with email context support and Cart Contents product collection [#61546](https://github.com/woocommerce/woocommerce/pull/61546) * Add - Add debug tool to backfill order fulfillment status in Analytics data. [#61721](https://github.com/woocommerce/woocommerce/pull/61721) * Add - Add fulfillment_status column to wc_order_stats table for new installations to enable order fulfillment tracking in analytics. [#61487](https://github.com/woocommerce/woocommerce/pull/61487) * Add - Add GET endpoint for retrieving individual shipping zone methods in REST API v4, allowing direct access to shipping method data by instance ID. [#61957](https://github.com/woocommerce/woocommerce/pull/61957) * Add - Add hook 'woocommerce_update_order_refund' for refund updates. [#61225](https://github.com/woocommerce/woocommerce/pull/61225) * Add - Add offline payments V4 API endpoint. [#61123](https://github.com/woocommerce/woocommerce/pull/61123) * Add - Adds an agentic commerce integration page when the agentic commerce feature is enabled. [#61427](https://github.com/woocommerce/woocommerce/pull/61427) * Add - Adds the checkout_sessions route for the agentic commerce protocol as an experimental feature [#61216](https://github.com/woocommerce/woocommerce/pull/61216) * Add - Add v4 API routes for fetching and updating payment gateways. [#61278](https://github.com/woocommerce/woocommerce/pull/61278) * Add - Add webhook functionality for agentic commerce protocol. [#61325](https://github.com/woocommerce/woocommerce/pull/61325) * Add - Add `/products/catalog` endpoints to v3 API with mock response behind a local feature flag. [#61332](https://github.com/woocommerce/woocommerce/pull/61332) * Add - Allow HTML tags in the cart product item data fields [#61437](https://github.com/woocommerce/woocommerce/pull/61437) * Add - Auto fill tracking url with the tracking number and the selected shipping provider. [#61368](https://github.com/woocommerce/woocommerce/pull/61368) * Add - Customers V4 endpoint [#61336](https://github.com/woocommerce/woocommerce/pull/61336) * Add - Refactor WooCommerce block entity registration and settings [#61131](https://github.com/woocommerce/woocommerce/pull/61131) * Add - Support for reply-to address in transactional emails [#61355](https://github.com/woocommerce/woocommerce/pull/61355) * Add - V4 sorting options in rest api for customers [#61507](https://github.com/woocommerce/woocommerce/pull/61507) * Add - Display an admin notice when the store's currency is not supported by PayPal Standard. [#62285](https://github.com/woocommerce/woocommerce/pull/62285) * Add - Display a notice when merchant's PayPal Standard account is locked or restricted by PayPal. [#62252](https://github.com/woocommerce/woocommerce/pull/62252) * Update - Add back the : symbol to the cart item data name element [#61839](https://github.com/woocommerce/woocommerce/pull/61839) * Update - Added display support for "Unique product id" in wp-admin products table. [#60049](https://github.com/woocommerce/woocommerce/pull/60049) * Update - Add notice to Add to Cart + Options block encouraging users to upgrade from Product Image Gallery block to Product Gallery [#61201](https://github.com/woocommerce/woocommerce/pull/61201) * Update - Add provider onboarding unsupported handling for the Payments settings page. [#61574](https://github.com/woocommerce/woocommerce/pull/61574) * Update - Adds authorization for agentic checkout [#61592](https://github.com/woocommerce/woocommerce/pull/61592) * Update - Add support for conditional "Finish checkout" button text in cart collections for email rendering [#61822](https://github.com/woocommerce/woocommerce/pull/61822) * Update - Add support for storing COGS values for orders when HPOS is disabled [#61307](https://github.com/woocommerce/woocommerce/pull/61307) * Update - Add to Cart + Options: show spinner when grouped product inners blocks are loading in the editor [#61242](https://github.com/woocommerce/woocommerce/pull/61242) * Update - Add to Cart + Options: stretch Product Quantity to the same height as the Add to Cart Button [#61713](https://github.com/woocommerce/woocommerce/pull/61713) * Update - Apply tighter font sizes and spacing in cart and checkout blocks [#59787](https://github.com/woocommerce/woocommerce/pull/59787) * Update - Check user capability before saving any settings. [#61218](https://github.com/woocommerce/woocommerce/pull/61218) * Update - Deprecate wc_enqueue_js in favor of wp_add_inline_script(). [#61474](https://github.com/woocommerce/woocommerce/pull/61474) * Update - Do not preload leaderboards and performance indicators data outside of Analytics screens. [#61190](https://github.com/woocommerce/woocommerce/pull/61190) * Update - E2E tests: adjust the E2E tests to WP 6.9 [#61648](https://github.com/woocommerce/woocommerce/pull/61648) * Update - Enable the Interactivity API-powered Mini Cart by default. [#60823](https://github.com/woocommerce/woocommerce/pull/60823) * Update - Group agentic commerce settings for better comprehension. [#61477](https://github.com/woocommerce/woocommerce/pull/61477) * Update - Implement approved download dirs cache to prevent duplicate queries. [#61159](https://github.com/woocommerce/woocommerce/pull/61159) * Update - Move HPOS Datastore Caching out of experimental phase. [#61521](https://github.com/woocommerce/woocommerce/pull/61521) * Update - Move order logs deletion to a scheduled action [#61121](https://github.com/woocommerce/woocommerce/pull/61121) * Update - Optimize caching of price data for variations [#61286](https://github.com/woocommerce/woocommerce/pull/61286) * Update - Payment gateways can now implement get_provider_links() to provide contextual provider links for the Payments settings page. [#61681](https://github.com/woocommerce/woocommerce/pull/61681) * Update - Prevent unnecessary queries in admin notices. [#61462](https://github.com/woocommerce/woocommerce/pull/61462) * Update - Product Gallery: remove temporary backwards compatible code for beta block [#61934](https://github.com/woocommerce/woocommerce/pull/61934) * Update - Remove CedCommerce from onboarding marketing task [#61758](https://github.com/woocommerce/woocommerce/pull/61758) * Update - Updated all PHP dependencies. [#61753](https://github.com/woocommerce/woocommerce/pull/61753) * Update - Updated MCP adapter to v0.3.0 and refactored initialization process. [#61974](https://github.com/woocommerce/woocommerce/pull/61974) * Update - Update offline methods REST API v4 route to settings/payments/offline-methods. [#61250](https://github.com/woocommerce/woocommerce/pull/61250) * Update - Update payments recommendations in South Africa. [#61922](https://github.com/woocommerce/woocommerce/pull/61922) * Update - Update WooCommerce email titles and descriptions when the block email editor is enabled. [#61883](https://github.com/woocommerce/woocommerce/pull/61883) * Update - Use 'publish' as the default post status for new email editor posts. [#61814](https://github.com/woocommerce/woocommerce/pull/61814) * Update - Add order meta to prevent duplicate PayPal Standard API calls when we have already received a 404 response for a capture request on an authorised payment. [#62314](https://github.com/woocommerce/woocommerce/pull/62314) * Update - Ensure PayPal Standard capture later flow uses the correct authorization ID. [#62212](https://github.com/woocommerce/woocommerce/pull/62212) * Update - Include WooCommerce version in PayPal Standard gateway requests. [#62203](https://github.com/woocommerce/woocommerce/pull/62203) * Update - Include WooCommerce version in the PayPal Standard request header. [#62286](https://github.com/woocommerce/woocommerce/pull/62286) * Update - Update version requirements to WordPress 6.8 and PHP 7.4 in readme.txt and woocommerce.php. [#62341](https://github.com/woocommerce/woocommerce/pull/62341) * Dev - Add wc/v4/shipping-zone-method endpoint for creating a shipping zone with Core Data compatibility and modern v4 architecture patterns. [#61275](https://github.com/woocommerce/woocommerce/pull/61275) * Dev - Add wc/v4/shipping-zone-method endpoint for updating a shipping zone with Core Data compatibility and modern v4 architecture patterns. [#61337](https://github.com/woocommerce/woocommerce/pull/61337) * Dev - Add wc/v4/shipping-zone-method endpoints (POST/PUT) for creating and updating shipping methods with Core Data compatibility and modern v4 architecture patterns. [#61124](https://github.com/woocommerce/woocommerce/pull/61124) * Dev - dev: add ctrf reporter for e2e tests [#61915](https://github.com/woocommerce/woocommerce/pull/61915) * Dev - dev: update CI config for Blocks e2e tests - WP pre-release job [#61537](https://github.com/woocommerce/woocommerce/pull/61537) * Dev - dev: Update sharding arguments for e2e tests to improve distribution [#61280](https://github.com/woocommerce/woocommerce/pull/61280) * Dev - Don't pass attributes: undefined while registering some blocks [#61945](https://github.com/woocommerce/woocommerce/pull/61945) * Dev - E2E tests: add JUnit report configuration [#61450](https://github.com/woocommerce/woocommerce/pull/61450) * Dev - Efficiency improvements to linter config [#61411](https://github.com/woocommerce/woocommerce/pull/61411) * Dev - Fix: [Flaky Test] can upload the CSV file and import products [#61273](https://github.com/woocommerce/woocommerce/pull/61273) * Dev - Implement skills for Claude [#61811](https://github.com/woocommerce/woocommerce/pull/61811) * Dev - Improve instructions for Claude Code [#61489](https://github.com/woocommerce/woocommerce/pull/61489) * Dev - Migrate usage of wc_enqueue_js() to wp_add_inline_script(). [#61494](https://github.com/woocommerce/woocommerce/pull/61494) * Dev - Move the business logic for v4 endpoints for shipping zones and methods from the global model to a dedicated service. [#61714](https://github.com/woocommerce/woocommerce/pull/61714) * Dev - prevent block settings warnings for checkout areas [#61830](https://github.com/woocommerce/woocommerce/pull/61830) * Dev - Remove notice to downgrade from Product Collection to Products (Beta) block [#61203](https://github.com/woocommerce/woocommerce/pull/61203) * Dev - skip iapi blocks E2E tests with WP 6.7 [#61850](https://github.com/woocommerce/woocommerce/pull/61850) * Dev - Update @automattic/webpack-rtl-plugin version [#59425](https://github.com/woocommerce/woocommerce/pull/59425) * Dev - Update email-editor dependency in WooCommerce composer.json to load the mirrored version [#61181](https://github.com/woocommerce/woocommerce/pull/61181) * Tweak - Angle brackets are now encoded in hex when rendered in a `