WooCommerce » WooCommerce 11.3 Orders Analytics Empty? Fix payment_method SQL

WooCommerce 11.3 Orders Analytics Empty? Fix payment_method SQL

WooCommerce 11.3.0 shipped on November 11, 2026, and it changes the Analytics database. If your Orders report under Analytics > Orders is suddenly an empty table after the update, the cause is almost always custom code (a snippet or an extension) that adds its own SQL to the Analytics queries.

A second, smaller surprise: on stores installed fresh on 11.3, the old WooCommerce > Reports menu is gone. I cover both below, plus how to make sure the 11.3 database update actually finished.


11.3 adds payment method filters to the Orders report. To do that, the wc_order_stats table gets a new nullable payment_method column, plus an index on (payment_method, date_paid, status). Existing orders are filled in by a background backfill that runs 500 orders per batch.

The problem is old custom SQL. Code that hooks a woocommerce_analytics_clauses_* filter, joins the wc_orders table and then uses a bare payment_method now hits two tables that both have that column. MySQL refuses the query with this error, and the report shows nothing:

Column 'payment_method' in field list is ambiguous

This is documented in the WooCommerce 11.3 developer advisory. WooCommerce core is fine. The broken query belongs to your own code or to an extension.


Take a database backup before you touch anything, and do the debugging on staging if you have it. Then turn on logging in wp-config.php so the SQL error lands somewhere you can read it.

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
woocommerce 11 3 analytics payment method wp config 1 - WooCommerce 11.3 Orders Analytics Empty? Fix payment_method SQL
Where it goes in wp-config.php: above the “That’s all, stop editing!” line

Reload Analytics > Orders and check wp-content/debug.log. You are looking for a WordPress database error that contains the ambiguous column message above. If the log file never appears, my post on debug.log not being created covers the usual reasons.

If you see a different database error, or none at all, this post is probably not your problem. Disable extensions one by one on staging until the report fills again.

Search your themes, mu-plugins and plugins for the Analytics clause filters, skipping WooCommerce itself:

cd /path/to/wordpress/wp-content
grep -rn "woocommerce_analytics_clauses_" themes/ mu-plugins/ plugins/ --include=*.php | grep -v "plugins/woocommerce/"

Every line it prints is a candidate. Look first at the ones that join wc_orders (often written as {$wpdb->prefix}wc_orders) and mention payment_method in a select, where or group by clause. No output means the clauses are not added from these folders.

If the hit is inside a commercial extension, do not edit it. Update the extension, and if the newest version still breaks the report, send the vendor the exact error from the log.

For your own code, the fix from the advisory is one change: tell MySQL which table you mean. A typical snippet written before 11.3 looks like this:

add_filter( 'woocommerce_analytics_clauses_select_orders_subquery', function ( $clauses ) {
    $clauses[] = ', payment_method';
    return $clauses;
} );

Change the bare column to the fully qualified name:

add_filter( 'woocommerce_analytics_clauses_select_orders_subquery', function ( $clauses ) {
    global $wpdb;
    $clauses[] = ", {$wpdb->prefix}wc_orders.payment_method";
    return $clauses;
} );

Do the same in every where and group by clause your code adds. If the report is still empty after the change, flush your object cache and reload it, because report data can be cached.

See also  ⚠️ User already has more than 'max_user_connections' active connections [✅ SOLVED]

Before you fix it, ask whether you still need it. A lot of these snippets exist only to filter Analytics by payment method. 11.3 now does that natively: the reports/orders and reports/orders/stats endpoints accept payment_method_is and payment_method_is_not. If that was the whole point of the snippet, delete it.


The 11.3.0 release notes list a database update for this release. The payment method backfill runs in the background through the WooCommerce queue, so older orders can show no payment method in Analytics until it is done.

With WP-CLI you can run all pending WooCommerce database updates in one go (it is in the WC-CLI command list):

wp wc update

Queued update callbacks use the woocommerce_run_update_callback hook in the woocommerce-db-updates group. You can find them under WooCommerce > Status > Scheduled Actions by searching for that hook. If they sit in Pending and never run, process the group by hand:

wp action-scheduler run --group=woocommerce-db-updates

Afterwards the Pending list for that hook should be empty. Actions that keep piling up are usually a WP-Cron problem, not a WooCommerce one. I wrote up the full checklist in Action Scheduler past-due actions.

💡 Big stores: the new index needs about 47 MB per million orders, and on MySQL 5.7 adding the column rebuilds the whole table. Run the update in a quiet hour, not during a sale.


Stores first installed on 11.3.0 or later no longer show WooCommerce > Reports. Stores that were updated from an older version keep it. WooCommerce decides this from the woocommerce_initial_installed_version option.

The page itself still works at /wp-admin/admin.php?page=wc-reports. To get the menu item back, add this to a small plugin or your child theme’s functions.php:

add_filter( 'woocommerce_show_legacy_reports_menu', '__return_true' );

If you have custom report tabs hooked to wc_reports_tabs, wc_admin_reports_path or woocommerce_admin_reports, register those callbacks on plugins_loaded or init. The menu decision now happens at the very end of admin_menu, so anything registered later is missed.

The next changes do not show up as an empty report, but they can break integrations quietly. All of them are in the same developer advisory:

  • Refunds created through POST /wc/v3/orders/{id}/refunds with explicit line items are now validated. A wrong amount returns HTTP 400 or 422 instead of creating the refund.
  • Product API requests that combine on_sale with include or exclude now return only the products that match both.
  • VAT exemption and calculated shipping flags stay in the session when a customer saves their account. Code that relied on that save to clear them has to clear them itself.
  • The deprecated /wp-json/woocommerce/mcp endpoint is removed.

As of 2026-11-14 there is no 11.3.x dot release yet, so check the release notes again if you read this later. While you are testing, also look at your PHP version, which I covered in the WooCommerce PHP 8.1 requirement post.

TL;DR: An empty Orders report after WooCommerce 11.3 means custom SQL uses a bare payment_method column. Find the woocommerce_analytics_clauses_ filter, prefix the column with the wc_orders table (or delete the snippet and use the new payment method filter), run wp wc update, and add the woocommerce_show_legacy_reports_menu filter if you miss the old Reports menu.

Was this post helpful?

Leave a Comment

I enjoy constructive responses and professional comments to my posts, and invite anyone to comment or link to my site.

Recommended