Released
WooCommerce 11.2 is coming soon
This release is now available for testing. Review the highlights below, test the beta, and share feedback before the final release.
Highlights
- Withdraw emails are configurable
- Blocks have even more styling options
- Product CSV importers now much by GTIN and more
- 11.2.0 now available
- Released: October 07, 2026
- Feedback requested
Row matching and cleanup improvements for Product CSV importer
Product CSV importer matches by global unique id’s. With “Update existing products” enabled, the importer now matches rows by GTIN, UPC, EAN, or ISBN when no ID or SKU is present. Match order is ID, then SKU, then Global Unique ID. A non-blank identifier that matches nothing skips the row instead of creating a product, and a match with a different product type is refused, so an update cannot silently change a product’s type.
Import cleanup no longer runs site-wide orphan deletes for variations, post meta, and term relationships. Those added over a minute to small imports on large catalogs and could remove unrelated data, and cleanup now removes only the temporary placeholder products created by that import. (#68392, #68090, #67940)
Date fields in Additional Checkout API
The additional checkout fields API now supports date fields, allowing extensions and developers to collect information such as birthdays and preferred delivery dates through the Checkout block.
Date fields use the browser’s native date picker, including the familiar controls available on mobile. Shoppers enter dates using their browser’s locale, while emails and order details display them using the site’s date format.
Developers can restrict the dates shoppers choose using fixed limits or periods relative to today. For example, a store could allow preferred delivery dates from tomorrow through the next 30 days. These limits apply in the Checkout block and My Account forms. (#68143, #68083, #68048)
Configurable emails
WooCommerce now includes configurable emails for order withdrawal requests, acknowledging customers and notifying merchants when a request is submitted. Store owners can manage both emails from WooCommerce > Settings > Emails, including recipients, additional content, previews, and whether each notification is enabled.
Merchants can now tailor withdrawal communications to their brand and processes, choose who receives notifications, and disable messages they do not need. This creates a more relevant customer experience while giving store owners greater control over their flows and voice. (#67799)
Pump up the styling
Several blocks have been updated to include more styling options. These styles are added on top of the styles that were already supported by those blocks. They can be used by themes to customize the look and feel of a store and they can be overridden by users via global styles (Appearance > Editor > Styles > Blocks) or directly in each block instance.
Product Image — border style support. (#68342)
Product Quantity — border and box shadow styles, also applied to the Cart quantity selector. (#68148)
Product Quantity — border radius styles. (#68000)
Product Quantity — text and background color styles. (#68040)
Product Filters — sticky positioning support. (#68256)
Chips — typography, padding and border radius styles. (#68105)
Faster catalogs and admin screens
Reordering products now takes the same time regardless of catalog size. Stores with variable products load and check out faster, because price transients no longer grow without limit and checkout-triggered product saves skip redundant cache flushes. Report totals load with fewer queries, and their memory use no longer grows with customer count. (#66603, #68058, #66966, #68302)
Developer Advisories
PhotoSwipe error messages no longer include failed image URLs
The %url% placeholder is no longer replaced with the failed image’s source. A custom errorMsg containing %url% will render that token literally after upgrading. (#68888)
Date filters now use the store’s local day for orders and productswc_get_orders() and wc_get_products() now read a date string like 2026-07-20 as a day in the store’s timezone instead of UTC. Product queries change on every store; order queries only on stores still keeping orders as posts. (#67903, #67827)
Store API cart-session failure responses omit cart headers
A failure loading the cart session now returns a 500 with no Cart-Token or Cart-Hash. Clients must treat missing headers as an unavailable cart rather than a new one. (#67920)
Product attributes can now be deleted and recreated in one operationwc_delete_attribute() unregisters the taxonomy immediately instead of at the end of the request, so a slug like pa_color can be recreated right away. Code that still reads the attribute after deletion must treat it as missing. (#68212)
Removal of experimental abandoned cart recovery and Agentic Checkout APIs
Both default-off experiments are gone, including the wc/agentic/v1 routes with no replacement endpoint. The 11.2 database update cancels queued recovery actions and drops the wc_email_unsubscribes table. (#67726, #67914)
Changes to settings and email registrationregister_wp_admin_settings moves from admin_init priority 10 to 999, so extensions adding settings pages or email classes during admin_init are no longer too late. An un-prioritized remove_action() on it now silently does nothing. (#67718).
Changes to webhook validation for trashed and restored postsWC_Webhook::is_valid_post_action() now derives the resource from the post ID instead of a request global, ending cross-resource deliveries like a trashed coupon firing product.deleted. A variable product trashed during a front-end request now fires one delivery per variation. (#68208)
Product archive pagination argument changes
Starting in WooCommerce 11.2, the default pagination arguments for non-shortcode product archives on classic themes will use the base and format structure expected by WordPress’s paginate_links() function. (#68116)
Sequential coupon order changes
With sequential discounts enabled, coupons of equal priority and item limit now apply in the order the customer entered them rather than lowest-amount-first. Because each coupon calculates from the price the previous one left, cart totals can shift. (#68030)
The admin order editor no longer accepts negative line item quantities
The order item AJAX endpoints now reject quantities below the minimum, and woocommerce_quantity_input_min_admin gains an add context plus server-side enforcement. Returning '' to remove the minimum no longer works — return a numeric floor instead. (#67921)
Classic product templates now show parent categories firstsingle-product/meta.php passes a new breadcrumb orderby to wc_get_product_category_list(), turning “Cameras, Electronics” into “Electronics, Cameras”. The woocommerce_product_meta_category_orderby filter restores the old order. (#67633)
Click here for the full list of developer advisories
Custom product category display types are normalized on save
The admin form now runs display_type through sanitize_key() instead of esc_attr(), so Custom_Grid is stored as custom_grid. Any comparison against an uppercase key stops matching once a category is saved.
Legacy product widgets use lookup data for sales and rating ordering
The Products and Top Rated Products widgets now sort from wc_product_meta_lookup rather than total_sales and _wc_average_rating post meta. Stale lookup rows can change widget order even when the post meta is current.
HTML filtering in checkbox descriptions and widget labelswp_kses_post() now filters checkbox tooltip_html and the number, select, textarea and checkbox labels in WC_Widget::form(). Custom controls, scripts or event-handler attributes embedded there get stripped.
Query hook changes in customer and review report totals
The reviews and customers totals endpoints no longer fire pre_get_comments, comments_pre_query, users_pre_query or found_users_query, and comments_clauses now receives one grouped per-rating query rather than one per rating.
Blueprint exports no longer include payment settings
Payments is gone from the export options and the deprecated ExportWCPaymentGateways class now returns an empty step, so provisioning workflows need a manual gateway setup step after import.
Cart and Checkout blocks use a fixed-width order summary column and a wider two-column breakpoint
The sidebar becomes a fixed 360px flex column instead of 35%, and the is-large two-column threshold moves from 700px to 920px of container width, so custom CSS keyed to percentages or a 700px media query will misalign.
Coupon minimum and maximum spend are checked against each other
set_minimum_amount() now throws a WC_Data_Exception when the minimum is higher than the stored maximum, and the wc/v2 and wc/v3 coupon endpoints return a 400 for an invalid pair. Code that sets both amounts with two separate setter calls can fail depending on which runs first. Set both in one set_props() call instead. (#67703, #68251, #69237)
use_verbose_page_rules no longer controls Shop page rewrite rules
WooCommerce now decides whether to add Shop child page rewrite rules by comparing the Shop page path and product base when it generates rewrites. The use_verbose_page_rules key stays in the woocommerce_permalinks option, but WooCommerce no longer reads or writes it. Code that sets the key has no effect. (#68089)
New Store API filter for validating cart item quantities
Return a WP_Error from woocommerce_store_api_cart_item_quantity_validation to reject a quantity change in the Store API and the Cart and Checkout blocks. woocommerce_update_cart_validation still covers only the shortcode cart, so a rule there alone does not reach the Cart block. Read the full advisory. (#67928)
API Changes
REST API
- Stop attributing refunds to user #1 when no user is logged in
- Restrict
is_super_adminandwoocommerce_metain the users endpoint to edit context - Products report endpoints accept a
searchargument; empty filter intersections report nothing - Add billing and shipping phone columns to the Analytics Customers report and its REST API
- Prevent REST product update and duplicate requests from fatally erroring on a variation ID
- Update product rating aggregates when REST API reviews are created, re-rated, or moved
- Expose the Customer Stock Notifications settings through the REST settings API
- wc/v4 customers endpoint computes order count, total spent and avatar only when requested
Store API
- Cart items endpoint publishes
cart-itemextensions, notproduct - Order endpoint returns
item_dataas a list with anidproperty - Appended
item_dataentries report a nullidAddraw_keyto cart itemitem_data - Add a cart item quantity validation filter to the Store API
- Return a Store API error response instead of a fatal when the cart cannot be loaded
- Prevent cart loss after Store API batch load failures
- Return HTTP 429 instead of 400 when requests exceed the rate limit
- Correct the public TypeScript type for the
item_datahiddenflag - Exclude password-protected product reviews from the Store API
- Report inherited password protection correctly for product variations
- Restore the cart context after hydrating a Store API route
- Ensure Store API checkout carts clear after redirect payments
Additional Checkout Fields API
Database Changes
wc_update_11201_invalidate_analytics_reports_cache(#67626)wc_update_11201_migrate_tax_lookup_order_items(#67896)wc_update_11202_reset_refund_returning_customer_markers(#67713)wc_update_11203_normalize_stock_notification_emails(#68386)wc_update_1120_cleanup_inherited_variation_images(#68389)wc_update_1120_delete_surface_cart_checkout_note(#68088)wc_update_1120_migrate_stock_notifications_alpha_constant(#64490)wc_update_1120_remove_abandoned_cart_recovery(#67726)
Test WooCommerce 11.2
Install the WooCommerce Beta Tester plugin, switch to the Beta channel, and update to 11.2.0-beta.1. Please read our Beta Testing documentation for more info.
Leave a Reply