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 ); $operator = strtoupper( $operator );
if ( ! in_array( $operator, array( 'AND', 'OR', 'NOT' ), true ) ) { if ( ! in_array( $operator, array( 'AND', 'OR', 'NOT' ), true ) ) {
return array(); $this->output = array();
return $this->output;
} }
$count = count( $args ); $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 3.1.0
* @since 4.7.0 Uses `WP_List_Util` class. * @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 $list An array of objects to filter.
* @param array $args Optional. An array of key => value arguments to match * @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. * @return array Array of found values.
*/ */
function wp_list_filter( $list, $args = array(), $operator = 'AND' ) { function wp_list_filter( $list, $args = array(), $operator = 'AND' ) {
if ( ! is_array( $list ) ) { return wp_filter_object_list( $list, $args, $operator );
return array();
}
$util = new WP_List_Util( $list );
return $util->filter( $args, $operator );
} }
/** /**

View File

@ -16,7 +16,7 @@
* *
* @global string $wp_version * @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. * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.