WordPress.org

Make WordPress Core

Ticket #9124: 9124.diff

File 9124.diff, 1.3 KB (added by dd32, 5 years ago)
  • wp-includes/query.php

     
    21462146                if ( ! empty($q['meta_key']) ) 
    21472147                        $where .= $wpdb->prepare(" AND $wpdb->postmeta.meta_key = %s ", $q['meta_key']); 
    21482148                if ( ! empty($q['meta_value']) ) { 
    2149                         if ( ! isset($q['meta_compare']) || empty($q['meta_compare']) || ! in_array($q['meta_compare'], array('=', '!=', '>', '>=', '<', '<=')) ) 
     2149                        if ( ! isset($q['meta_compare']) || empty($q['meta_compare']) || ! in_array($q['meta_compare'], array('=', '!=', '>', '>=', '<', '<=', 'in')) ) 
    21502150                                $q['meta_compare'] = '='; 
    2151  
    2152                         $where .= $wpdb->prepare("AND $wpdb->postmeta.meta_value {$q['meta_compare']} %s ", $q['meta_value']); 
     2151                        if ( 'in' == $q['meta_compare'] ) { 
     2152                                if ( !is_array($q['meta_value']) ) 
     2153                                        $q['meta_value'] = preg_split('!,\s+!', $q['meta_value']); 
     2154                                $meta_field_types = rtrim(str_repeat('%s,', count($q['meta_value'])), ','); 
     2155                                $where .= $wpdb->prepare("AND $wpdb->postmeta.meta_value IN($meta_field_types) ", $q['meta_value']); 
     2156                                unset($meta_field_types); 
     2157                        } else { 
     2158                                $where .= $wpdb->prepare("AND $wpdb->postmeta.meta_value {$q['meta_compare']} %s ", $q['meta_value']); 
     2159                        } 
     2160                        var_dump($where); 
    21532161                } 
    21542162 
    21552163                // Apply filters on where and join prior to paging so that any