Ticket #15016: wp_list_filter.3.diff
| File wp_list_filter.3.diff, 2.8 KB (added by , 15 years ago) |
|---|
-
wp-includes/functions.php
3019 3019 * @return array A list of objects or object fields 3020 3020 */ 3021 3021 function wp_filter_object_list( $list, $args = array(), $operator = 'and', $field = false ) { 3022 if ( !is_array($list) ) 3023 return array(); 3022 $list = wp_list_filter( $list, $args, $operator ); 3024 3023 3025 if ( empty($args))3026 $ args = array();3024 if ( $field ) 3025 $list = wp_list_pluck( $list, $field ); 3027 3026 3028 if ( empty($args) && !$field )3029 return $list; // nothing to do 3027 return $list; 3028 } 3030 3029 3031 $count = count($args); 3030 /** 3031 * Filters a list of objects, based on a set of key => value arguments 3032 * 3033 * @since 3.1.0 3034 * 3035 * @param array $list An array of objects to filter 3036 * @param array $args An array of key => value arguments to match against each object 3037 * @param string $operator The logical operation to perform. 'or' means only one element 3038 * from the array needs to match; 'and' means all elements must match. The default is 'and'. 3039 * @return array 3040 */ 3041 function wp_list_filter( $list, $args = array(), $operator = 'and' ) { 3042 if ( empty( $args ) ) 3043 return $list; 3032 3044 3045 $count = count( $args ); 3046 3033 3047 $filtered = array(); 3034 3048 3035 3049 foreach ( $list as $key => $obj ) { 3036 $matched = count( array_intersect_assoc( (array) ($obj), $args ) );3050 $matched = count( array_intersect_assoc( (array) $obj, $args ) ); 3037 3051 if ( ('and' == $operator && $matched == $count) || ('or' == $operator && $matched <= $count) ) { 3038 if ( $field ) 3039 $filtered[] = $obj->$field; 3040 else 3041 $filtered[$key] = $obj; 3052 $filtered[$key] = $obj; 3042 3053 } 3043 3054 } 3044 3055 … … 3046 3057 } 3047 3058 3048 3059 /** 3060 * Pluck a certain field out of each object in a list 3061 * 3062 * @since 3.1.0 3063 * 3064 * @param array $list A list of objects or arrays 3065 * @param int|string $field A field from the object to place instead of the entire object 3066 * @return array 3067 */ 3068 function wp_list_pluck( $list, $field ) { 3069 foreach ( $list as $key => $value ) { 3070 $value = (array) $value; 3071 $list[ $key ] = $value[ $field ]; 3072 } 3073 3074 return $list; 3075 } 3076 3077 /** 3049 3078 * Determines if default embed handlers should be loaded. 3050 3079 * 3051 3080 * Checks to make sure that the embeds library hasn't already been loaded. If -
wp-includes/query.php
1951 1951 1952 1952 // Back-compat 1953 1953 if ( !empty( $ids ) ) { 1954 $cat_query = wp_ filter_object_list( $tax_query, array( 'taxonomy' => 'category' ) );1954 $cat_query = wp_list_filter( $tax_query, array( 'taxonomy' => 'category' ) ); 1955 1955 if ( !empty( $cat_query ) ) { 1956 1956 $cat_query = reset( $cat_query ); 1957 1957 $cat = get_term_by( $cat_query['field'], $cat_query['terms'][0], 'category' );