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' );
 	}

 	/**