WordPress.org

Make WordPress Core

Ticket #27918: 27918.2.diff

File 27918.2.diff, 868 bytes (added by andg, 6 years ago)

Checking if both the key and the value are arrays, and attempt to perform an intersection between them.

  • wp-includes/functions.php

    diff --git a/wp-includes/functions.php b/wp-includes/functions.php
    index b658337..0825811 100644
    a b function wp_list_filter( $list, $args = array(), $operator = 'AND' ) { 
    31753175
    31763176                $matched = 0;
    31773177                foreach ( $args as $m_key => $m_value ) {
    3178                         if ( array_key_exists( $m_key, $to_match ) && $m_value == $to_match[ $m_key ] )
    3179                                 $matched++;
     3178                        if ( array_key_exists( $m_key, $to_match ) ) {
     3179                                if ( is_array( $to_match[ $m_key ] ) ) {
     3180                                        if ( is_array( $m_value ) && array_intersect( $m_value, $to_match[ $m_key ] ) ) {
     3181                                                $matched++;
     3182                                        }
     3183                                        elseif ( in_array( $m_value, $to_match[ $m_key ] ) ) {
     3184                                                $matched++;
     3185                                        }
     3186                                }
     3187                                elseif ( $m_value == $to_match[ $m_key ] ) {
     3188                                        $matched++;
     3189                                }
     3190                        }
    31803191                }
    31813192
    31823193                if ( ( 'AND' == $operator && $matched == $count )