Commit 2f84d2b5989 for woocommerce
commit 2f84d2b598922f8a8b9dd4afe2a746cf14d758cc
Author: Luigi Teschio <gigitux@gmail.com>
Date: Thu May 21 14:16:48 2026 +0200
Disable product list name and price sorting (#65244)
* Disable product list name and price sorting
* Add changelog entry for disabled product sorting
diff --git a/packages/js/experimental-products-app/changelog/fix-disable-name-price-sort b/packages/js/experimental-products-app/changelog/fix-disable-name-price-sort
new file mode 100644
index 00000000000..1a60b74e913
--- /dev/null
+++ b/packages/js/experimental-products-app/changelog/fix-disable-name-price-sort
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Disable sorting by product name and price in the product list.
diff --git a/packages/js/experimental-products-app/src/fields/name/field.tsx b/packages/js/experimental-products-app/src/fields/name/field.tsx
index 5e7644a0f7d..d1d125fa752 100644
--- a/packages/js/experimental-products-app/src/fields/name/field.tsx
+++ b/packages/js/experimental-products-app/src/fields/name/field.tsx
@@ -13,7 +13,7 @@ import { type ProductEntityRecord } from '../types';
const fieldDefinition = {
type: 'text',
label: __( 'Name', 'woocommerce' ),
- enableSorting: true,
+ enableSorting: false,
filterBy: false,
enableHiding: false,
} satisfies Partial< Field< ProductEntityRecord > >;
diff --git a/packages/js/experimental-products-app/src/fields/price/field.tsx b/packages/js/experimental-products-app/src/fields/price/field.tsx
index b1d4938cc7f..a258e71497f 100644
--- a/packages/js/experimental-products-app/src/fields/price/field.tsx
+++ b/packages/js/experimental-products-app/src/fields/price/field.tsx
@@ -57,7 +57,7 @@ const CurrencySuffixSlot = () => {
const fieldDefinition = {
label: __( 'Price', 'woocommerce' ),
- enableSorting: true,
+ enableSorting: false,
filterBy: {
operators: [ 'is', 'between', 'greaterThanOrEqual', 'lessThanOrEqual' ],
},
diff --git a/packages/js/experimental-products-app/src/product-list/query.test.ts b/packages/js/experimental-products-app/src/product-list/query.test.ts
index 6b32d587e5b..46ee45e7204 100644
--- a/packages/js/experimental-products-app/src/product-list/query.test.ts
+++ b/packages/js/experimental-products-app/src/product-list/query.test.ts
@@ -26,14 +26,28 @@ describe( 'buildProductListQuery', () => {
expect.objectContaining( {
per_page: 25,
page: 3,
- order: 'asc',
- orderby: 'title',
_embed: 1,
search_name_or_sku: 'hoodie',
} )
);
} );
+ it( 'does not map disabled sort fields to query params', () => {
+ const nameSortQuery = buildProductListQuery( baseView );
+ const priceSortQuery = buildProductListQuery( {
+ ...baseView,
+ sort: {
+ field: 'price',
+ direction: 'desc',
+ },
+ } as View );
+
+ expect( nameSortQuery.order ).toBeUndefined();
+ expect( nameSortQuery.orderby ).toBeUndefined();
+ expect( priceSortQuery.order ).toBeUndefined();
+ expect( priceSortQuery.orderby ).toBeUndefined();
+ } );
+
it( 'maps supported filters to the v4 product query', () => {
const query = buildProductListQuery( {
...baseView,
diff --git a/packages/js/experimental-products-app/src/product-list/query.ts b/packages/js/experimental-products-app/src/product-list/query.ts
index a5eff74171a..bb906442bba 100644
--- a/packages/js/experimental-products-app/src/product-list/query.ts
+++ b/packages/js/experimental-products-app/src/product-list/query.ts
@@ -29,6 +29,7 @@ export type ProductListQuery = Omit<
};
const SUPPORTED_STATUS_FILTER_FIELDS = [ 'status', 'product_status' ];
+const DISABLED_SORT_FIELDS = [ 'name', 'price' ];
function isStringArray( value: unknown ): value is string[] {
return (
@@ -232,15 +233,19 @@ function applyStockQuantityFilter( query: ProductListQuery, filter: Filter ) {
}
export function buildProductListQuery( view: View ): ProductListQuery {
+ const sort =
+ view.sort && ! DISABLED_SORT_FIELDS.includes( view.sort.field )
+ ? view.sort
+ : undefined;
const query: ProductListQuery = {
_embed: 1,
per_page: view.perPage,
page: view.page,
- order: view.sort?.direction,
+ order: sort?.direction,
orderby:
- view.sort?.field === 'name'
+ sort?.field === 'name'
? 'title'
- : ( view.sort?.field as ProductQuery[ 'orderby' ] ),
+ : ( sort?.field as ProductQuery[ 'orderby' ] ),
search_name_or_sku: view.search || undefined,
};