From 6f023bc765d775575c7fb01b4f2ef76a5264efb5 Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Tue, 9 Nov 2021 01:09:11 +0000 Subject: [PATCH] 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. git-svn-id: https://develop.svn.wordpress.org/trunk@52066 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-list-util.php | 3 ++- src/wp-includes/functions.php | 9 ++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/wp-includes/class-wp-list-util.php b/src/wp-includes/class-wp-list-util.php index dfd44172b4..4df1dac357 100644 --- a/src/wp-includes/class-wp-list-util.php +++ b/src/wp-includes/class-wp-list-util.php @@ -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 ); diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index 667049aa3f..58d762df80 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -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 ); } /**