Commit c3ec96d661 for woocommerce
commit c3ec96d661099ade65a8b49aaac87185bb8cea84
Author: Chi-Hsuan Huang <chihsuan.tw@gmail.com>
Date: Mon Jan 5 12:08:23 2026 +0900
Fix Analytics Products report compatibility for extended variable product types (#62648)
Fix Analytics Products report compatibility for extended variable
product types
Products extending WC_Product_Variable (like variable-subscription or ATUM
product types) were not showing variations breakdown in Analytics > Products
because the isVariable check only matched type === 'variable'.
This change adds a fallback to check if the product has variations array,
which correctly identifies all variable-like products regardless of their
specific type string.
diff --git a/plugins/woocommerce/changelog/fix-variable-product-types-analytics-compatibility b/plugins/woocommerce/changelog/fix-variable-product-types-analytics-compatibility
new file mode 100644
index 0000000000..a01cb09024
--- /dev/null
+++ b/plugins/woocommerce/changelog/fix-variable-product-types-analytics-compatibility
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Fix Analytics Products report to support product types extending WC_Product_Variable by checking variations array as fallback.
diff --git a/plugins/woocommerce/client/admin/client/analytics/report/products/index.js b/plugins/woocommerce/client/admin/client/analytics/report/products/index.js
index 8f63dc056d..87f648ccb2 100644
--- a/plugins/woocommerce/client/admin/client/analytics/report/products/index.js
+++ b/plugins/woocommerce/client/admin/client/analytics/report/products/index.js
@@ -153,10 +153,12 @@ export default compose(
const includeArgs = { include: productId };
// TODO Look at similar usage to populate tags in the Search component.
const products = getItems( 'products', includeArgs );
+ const product = products?.get( productId );
const isVariable =
- products &&
- products.get( productId ) &&
- products.get( productId ).type === 'variable';
+ product &&
+ ( product.type === 'variable' ||
+ ( Array.isArray( product.variations ) &&
+ product.variations.length > 0 ) );
const isProductsRequesting = isResolving( 'getItems', [
'products',
includeArgs,