Ticket #9124: 9124.3.diff

File 9124.3.diff, 1.3 KB (added by wojtek.szkutnik, 3 years ago)
Line 
1Index: wp-includes/query.php
2===================================================================
3--- wp-includes/query.php       (revision 15497)
4+++ wp-includes/query.php       (working copy)
5@@ -2305,10 +2305,18 @@
6                if ( ! empty($q['meta_key']) )
7                        $where .= $wpdb->prepare(" AND $wpdb->postmeta.meta_key = %s ", $q['meta_key']);
8                if ( ! empty($q['meta_value']) ) {
9-                       if ( empty($q['meta_compare']) || ! in_array($q['meta_compare'], array('=', '!=', '>', '>=', '<', '<=')) )
10+                       if ( empty($q['meta_compare']) || ! in_array($q['meta_compare'], array('=', '!=', '>', '>=', '<', '<=', 'in')) )
11                                $q['meta_compare'] = '=';
12-
13-                       $where .= $wpdb->prepare("AND $wpdb->postmeta.meta_value {$q['meta_compare']} %s ", $q['meta_value']);
14+                       
15+                       if ( 'in' == $q['meta_compare'] ) {
16+                                       if ( !is_array($q['meta_value']) )
17+                                               $q['meta_value'] = preg_split('!,\[\r\n\t ]+!', $q['meta_value']);
18+                                       $meta_field_types = substr(str_repeat(',%s', count($q['meta_value'])), 1);
19+                                       $where .= $wpdb->prepare("AND $wpdb->postmeta.meta_value IN($meta_field_types) ", $q['meta_value']);
20+                                       unset($meta_field_types);
21+                       }
22+                       else
23+                               $where .= $wpdb->prepare("AND $wpdb->postmeta.meta_value {$q['meta_compare']} %s ", $q['meta_value']);
24                }
25 
26                // Apply filters on where and join prior to paging so that any