From 12fed710d7c5cab8e75f1d049a7684d7c9b1999f Mon Sep 17 00:00:00 2001 From: Himanshu Pathak Date: Wed, 29 Jul 2026 17:25:18 +0530 Subject: [PATCH 1/2] prevent submission of admin filter forms when no filter criteria are selected --- src/wp-includes/script-loader.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index fd1f24a08968d..71b0a8d53cfdc 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -767,8 +767,10 @@ function wp_default_scripts( $scripts ) { $scripts->set_translations( 'common' ); $bulk_action_observer_ids = array( - 'bulk_action' => 'action', - 'changeit' => 'new_role', + 'bulk_action' => 'action', + 'changeit' => 'new_role', + 'filter_action' => 'filter_action', + 'post-query-submit' => 'post-query-submit', ); did_action( 'init' ) && $scripts->localize( 'common', From 8de0df705182c87c53f22ebc83f4d23af8ddd1f9 Mon Sep 17 00:00:00 2001 From: Himanshu Pathak Date: Wed, 29 Jul 2026 17:25:38 +0530 Subject: [PATCH 2/2] prevent form submission and display error notice when applying empty list table filters --- src/js/_enqueues/admin/common.js | 48 +++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/js/_enqueues/admin/common.js b/src/js/_enqueues/admin/common.js index c3d49310e8897..c6da83fa5c018 100644 --- a/src/js/_enqueues/admin/common.js +++ b/src/js/_enqueues/admin/common.js @@ -1330,7 +1330,53 @@ $( function() { 'bulk_action' : window.bulkActionObserverIds.bulk_action, 'changeit' : window.bulkActionObserverIds.changeit }; - if ( ! Object.keys( bulkFieldRelations ).includes( submitterName ) ) { + + var filterButtonNames = [ + window.bulkActionObserverIds.filter_action, + window.bulkActionObserverIds['post-query-submit'] + ]; + + if ( ! Object.keys( bulkFieldRelations ).includes( submitterName ) && ! filterButtonNames.includes( submitterName ) ) { + return; + } + + if ( filterButtonNames.includes( submitterName ) ) { + var filterDropdowns = form.querySelectorAll( '.actions select' ); + var isFilterActionValid = false; + var urlParams = new URLSearchParams( window.location.search ); + + for ( var i = 0; i < filterDropdowns.length; i++ ) { + var select = filterDropdowns[ i ]; + if ( select.name === 'action' || select.name === 'action2' ) { + continue; + } + if ( select.value !== '0' && select.value !== '' && select.value !== '-1' ) { + isFilterActionValid = true; + break; + } + if ( urlParams.has( select.name ) ) { + isFilterActionValid = true; + break; + } + } + + if ( isFilterActionValid ) { + return; + } + + event.preventDefault(); + event.stopPropagation(); + $( 'html, body' ).animate( { scrollTop: 0 } ); + + var filterErrorMessage = __( 'Please select a filter to apply.' ); + addAdminNotice( { + id: 'no-filter-selected', + type: 'error', + message: filterErrorMessage, + dismissible: true, + } ); + + wp.a11y.speak( filterErrorMessage ); return; }