Commit 297211e641c for woocommerce
commit 297211e641c9f85174545ada4f591feb99d6ab81
Author: Luigi Teschio <gigitux@gmail.com>
Date: Tue Aug 18 13:45:28 2026 +0200
Add product sorting usage tracking (#67782)
* Add tracking for product sorting usage
* Add changelog entry for product sorting tracking
* Expand product sorting tracking comment
* Improve logic
* fix unit test
diff --git a/plugins/woocommerce/changelog/wooplug-7525-track-product-sorting-usage b/plugins/woocommerce/changelog/wooplug-7525-track-product-sorting-usage
new file mode 100644
index 00000000000..8e4bd10c574
--- /dev/null
+++ b/plugins/woocommerce/changelog/wooplug-7525-track-product-sorting-usage
@@ -0,0 +1,4 @@
+Significance: patch
+Type: add
+
+Add tracking for product sorting views and manual reordering.
diff --git a/plugins/woocommerce/client/legacy/js/admin/product-ordering.js b/plugins/woocommerce/client/legacy/js/admin/product-ordering.js
index 6df42f01664..521994e30bb 100644
--- a/plugins/woocommerce/client/legacy/js/admin/product-ordering.js
+++ b/plugins/woocommerce/client/legacy/js/admin/product-ordering.js
@@ -60,6 +60,14 @@ jQuery( function( $ ) {
ui.item.find( '.check-column input' ).show().siblings( 'img' ).remove();
$( 'table.widefat tbody th, table.widefat tbody td' ).css( 'cursor', 'move' );
$( 'table.widefat tbody' ).sortable( 'enable' );
+ if (
+ response &&
+ 'object' === typeof response &&
+ window.wcTracks &&
+ window.wcTracks.recordEvent
+ ) {
+ window.wcTracks.recordEvent( 'products_sorting_reordered' );
+ }
}
);
diff --git a/plugins/woocommerce/includes/tracks/events/class-wc-products-tracking.php b/plugins/woocommerce/includes/tracks/events/class-wc-products-tracking.php
index 2c217909413..20ccf479aeb 100644
--- a/plugins/woocommerce/includes/tracks/events/class-wc-products-tracking.php
+++ b/plugins/woocommerce/includes/tracks/events/class-wc-products-tracking.php
@@ -64,10 +64,17 @@ class WC_Products_Tracking {
&& 'product' === wp_unslash( $_GET['post_type'] )
&& ! isset( $_GET['_wp_http_referer'] )
) {
- // phpcs:enable
WC_Tracks::record_event( 'products_view' );
+ // Track sorting mode.
+ if (
+ isset( $_GET['orderby'] )
+ && 'menu_order title' === wc_clean( wp_unslash( $_GET['orderby'] ) )
+ ) {
+ WC_Tracks::record_event( 'products_sorting_view' );
+ }
+
// phpcs:disable WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.NonceVerification
if (
isset( $_GET['s'] )
diff --git a/plugins/woocommerce/tests/php/includes/class-wc-products-tracking-test.php b/plugins/woocommerce/tests/php/includes/class-wc-products-tracking-test.php
index e4c72daa2e9..959f3489045 100644
--- a/plugins/woocommerce/tests/php/includes/class-wc-products-tracking-test.php
+++ b/plugins/woocommerce/tests/php/includes/class-wc-products-tracking-test.php
@@ -27,6 +27,7 @@ class WC_Products_Tracking_Test extends \WC_Unit_Test_Case {
* @return void
*/
public function tearDown(): void {
+ unset( $_GET['post_type'], $_GET['orderby'], $_GET['_wp_http_referer'], $_GET['s'], $_POST['action'] );
update_option( 'woocommerce_allow_tracking', 'no' );
parent::tearDown();
}
@@ -100,12 +101,24 @@ class WC_Products_Tracking_Test extends \WC_Unit_Test_Case {
}
/**
- * Test wcadmin_products_view tracks event
+ * @testdox Should record a products view without a sorting view for the standard Products list.
*/
public function test_products_view(): void {
$_GET['post_type'] = 'product';
do_action( 'load-edit.php' );
$this->assertRecordedTracksEvent( 'wcadmin_products_view' );
+ $this->assertNotRecordedTracksEvent( 'wcadmin_products_sorting_view' );
+ }
+
+ /**
+ * @testdox Should record only the sorting view event when the Products list is in sorting mode.
+ */
+ public function test_products_sorting_view(): void {
+ $_GET['post_type'] = 'product';
+ $_GET['orderby'] = 'menu_order title';
+ do_action( 'load-edit.php' );
+ $this->assertRecordedTracksEvent( 'wcadmin_products_view' );
+ $this->assertRecordedTracksEvent( 'wcadmin_products_sorting_view' );
}
/**