WooCommerce 10.7: Performance, Analytics, and a better Store API

WooCommerce 10.7.0 Has been released on April, 14, 2026. This post highlights what’s new in this version of WooCommerce.

See our update guide.
Download directly from WordPress.org.

Other important information:

Current Stable Tag:

WooCommerce 10.7.0

About:

  • ✅ Backwards compatible
  • PRs: 175
  • Contributors: 66

Performance enhancements and cache priming brings results

  • HPOS orders: Cache priming eliminates N+1 queries on /wc/v4/orders #63440
  • Checkout: Reduces the number of SQL queries required to persist a draft order during checkout #63258
  • Shipping: New indexes added on woocommerce_shipping_zone_methods (zone_id, method_id) #63674
  • Store API: Last-Modified timestamp gets cached on products endpoint, skipping DB query on cache hit #63228
  • More performance enhancements

This release delivers some of the most significant query reduction work in recent “memory.” The biggest win is on HPOS orders: the /wc/v4/orders endpoint previously triggered 271 database queries per request due to N+1 patterns during REST API serialization. Cache priming now reduces this to 132 queries, a 51% reduction, by preloading order data in bulk before serialization begins.

As a comparison, Checkout performance without object cache enabled can drop SQL queries from the 204 to 172 range. However, with object cache enabled, the reduction is more noticeable, ranging from 127 queries to as low as 115.

Additionally, a new woocommerce_pre_refresh_order_count_cache filter lets extensions and plugins skip redundant order count refreshes in high-traffic scenarios where the count cache is already being managed externally:

add_filter( 'woocommerce_pre_refresh_order_count_cache', '__return_true' );

Experimental block-based email editor improvements

  • Add – alignfull block support via root padding distribution in Content_Renderer #63752
  • Add – Rich WordPress embed cards: featured image, title, excerpt (5-card cap, 1-day transient TTL) #63542
  • Fix – Redundant CSS inlining consolidated to a single pass #63454
  • Add – New woocommerce_email_block_template_html filter for customizing reset template content #63558
  • Add – New woocommerce_email_editor_send_button_disabled filter for auto-save before send workflows #63722
After: WordPress embed block in email rendered as a rich card with featured image, title, and excerpt
After: rich embed card

The email editor remains behind a feature flag in Woo core. WordPress embed blocks now render as rich cards with a featured image, post title, excerpt, and site icon; they were previously rendered as plain links. Cards are cached via transient with a 1-day TTL and capped at 5 per email for performance.


Analytics export filters

  • Fix – Adds export column/item filters and forward currency from URL query #63618
add_filter( 'woocommerce_report_revenue_stats_export_columns', function( $columns ) {
    $columns['my_custom_column'] = __( 'My Column', 'my-plugin' );
    return $columns;
} );
add_filter( 'woocommerce_report_revenue_stats_prepare_export_item', function( $item, $row ) {
    $item['my_custom_column'] = $row['my_data'] ?? '';
    return $item;
}, 10, 2 );

Analytics exports now correctly forward currency context and any custom filter parameters to background jobs. Previously, background export jobs ran without these parameters, causing exported data to not match what was visible in the UI for multicurrency setups. The new filters let you customize export columns and row data per report type.


Accessibility improvements

  • Fix – System Status page: green status indicators now meet WCAG 2.2 AA contrast requirements #63746
  • Fix – Dashboard widget and checkout element contrast fixes #63522 #63521
Before
After

Shortcode checkout validated field border now uses the updated --wc-green variable and var(--wc-subtext .


Cart and Checkout block fixes

  • Fix – Nonce fetched fresh on cart store init, awaited before POST operations #62892
  • Update – Payment method radio always shown with a single option #63351
  • Color inheritance fixes for dark mode form elements.
Before
After

The payment method radio button is now always rendered, even when only a single payment method is available. Previously, the radio was hidden for single-option checkouts, which caused the payment method label and description to visually merge in a confusing way.


Order fulfillments gets a proper API (Beta)

  • Typed PHP methods: get_tracking_number(), set_tracking_number(), get_shipping_provider(), set_shipping_provider() #63573
  • New FULFILLMENT order note group constant in OrderNoteGroup #63516
  • Data store registered via woocommerce_data_stores filter, enabling extension override #63485
  • Namespace moved: Automattic\WooCommerce\Internal\FulfillmentsAutomattic\WooCommerce\Admin\Features\Fulfillments

While Fulfillments remains a beta feature, it receives a significant update in 10.7. Custom shipping providers are now accessible through settings: merchants define them via Settings > Shipping > Shipping Providers, backed by the new wc_fulfillment_shipping_provider taxonomy. Each provider supports a tracking URL template, and the orders list gains a filter dropdown for the new providers.

The PHP API is now fully typed so you can interact with fulfillment tracking data like this:

$fulfillment->get_tracking_number();
$fulfillment->set_tracking_number( '1Z999AA10123456784' );
$fulfillment->get_shipping_provider();
$fulfillment->set_shipping_provider( 'ups' );

API Updates

  • Customer username and password fields now always optional, auto-generated when empty #63536
  • Refund amount comparison now uses proper precision rounding, preventing false “amount cannot be less than line items” errors #63667

Other important information

Security hardening across several surfaces

XSS protection via wp_kses_post() has been extended to the v4 REST API order notes endpoint (OrderNotes\Controller::create_item()), matching the protection already in place for v1 through v3 #63661.

CSRF validation via check_ajax_referer() has been added to product_ordering() and term_ordering() AJAX handlers #63422.

Payment gateway password fields now use trim() instead of sanitize_text_field(), preserving % characters that were previously being stripped #63597.

Database updates

📀 Deprecate – wc_update_1070_disable_hpos_sync_on_read #63175


Changelog

View the full changelog.


Get WooCommerce 10.7

👉 To upgrade: See our update guide or download the latest release from WordPress.org.

🐞 Found a Bug? Please submit a report on GitHub.

Code Contributors

vladolaru
Abdalsalaam
szepeviktor
triple0t
ObliviousHarmony
jorgeatorres
shameemreza
SantosGuillamot
lucatume
staskus
albarin
mordeth
samnajian
kalessil
Anuj-Rathore24
lysyjan
hannahtinkler
Aljullu
nerrad
gutobenn
mikejolley
prettyboymp
luisherranz
opr
JimmyAppelt
straku
leonardola
pavel-mailpoet
Mayisha
tpaksu
raicem
samueljseay
faisuc
bhavz-10
wjrosa
BurakParsAydin
kraftbj
sunyatasattva
Dekadinious
mukeshpanchal27
jimjasson
oaratovskyi
kmanijak
costasovo
yuliyan
jacobmax
alopezari
AhmarZaidi
tiago-123
darcie
deepaklalwani97
chihsuan
arcangelini
luizreis
sarahdayan
louwie17
bor0
mcliwanow
helgatheviking
adrianlbs
jamesckemp
allilevine
ebinnion

2 responses to “WooCommerce 10.7: Performance, Analytics, and a better Store API”

  1. OBEIDA ZS ABURAIDA Avatar
    OBEIDA ZS ABURAIDA

    The article is missing the Code Contributors section 🤓

    1. Shani Banerjee Avatar
      Shani Banerjee

      Thank you for calling that out! It was there when I previewed it – regardless, I have restored the section!

Leave a Reply

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