General: Convert `wp_list_filter()` into a wrapper for `wp_filter_object_list()`.

The code in `wp_list_filter()` was a duplicate of `wp_filter_object_list()`, minus the `WP_List_Util::pluck()` (used when `$field` is configured).

In testing the wrapper, discovered an edge case (and potential bug) in `WP_List_Util::filter()` where if the operator matches an empty array was returned without resetting the output property. Without that property being set correctly, `WP_List_Util::get_output()` was not correct. This commit also fixes this by resetting the property to an empty array.  

Follow-up to [15686], [17427], [38928], [51044].

Props pbearne, sergeybiryukov, hellofromTonya.
Fixes #53988.
Built from https://develop.svn.wordpress.org/trunk@52066


git-svn-id: http://core.svn.wordpress.org/trunk@51658 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
hellofromTonya 2021-11-09 01:10:59 +00:00
parent 780b0399f7
commit 8853582220
3 changed files with 5 additions and 9 deletions

View File

@ -102,7 +102,8 @@ class WP_List_Util {
$operator = strtoupper( $operator );
if ( ! in_array( $operator, array( 'AND', 'OR', 'NOT' ), true ) ) {
return array();
$this->output = array();
return $this->output;
}
$count = count( $args );

View File

@ -5047,6 +5047,7 @@ function wp_filter_object_list( $list, $args = array(), $operator = 'and', $fiel
*
* @since 3.1.0
* @since 4.7.0 Uses `WP_List_Util` class.
* @since 5.9.0 Converted into a wrapper for `wp_filter_object_list()`.
*
* @param array $list An array of objects to filter.
* @param array $args Optional. An array of key => value arguments to match
@ -5058,13 +5059,7 @@ function wp_filter_object_list( $list, $args = array(), $operator = 'and', $fiel
* @return array Array of found values.
*/
function wp_list_filter( $list, $args = array(), $operator = 'AND' ) {
if ( ! is_array( $list ) ) {
return array();
}
$util = new WP_List_Util( $list );
return $util->filter( $args, $operator );
return wp_filter_object_list( $list, $args, $operator );
}
/**

View File

@ -16,7 +16,7 @@
*
* @global string $wp_version
*/
$wp_version = '5.9-alpha-52065';
$wp_version = '5.9-alpha-52066';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.