Ticket #9124: 9124.5.diff
File 9124.5.diff, 2.1 KB (added by , 13 years ago) |
---|
-
wp-includes/functions.php
4279 4279 $i = 0; 4280 4280 foreach ( $queries as $q ) { 4281 4281 $meta_key = isset( $q['meta_key'] ) ? trim( $q['meta_key'] ) : ''; 4282 $meta_value = isset( $q['meta_value'] ) ? trim( $q['meta_value'] ): '';4282 $meta_value = isset( $q['meta_value'] ) ? $q['meta_value'] : ''; 4283 4283 $meta_compare = isset( $q['meta_compare'] ) ? $q['meta_compare'] : '='; 4284 $meta_compare = strtoupper( $meta_compare ); 4284 4285 4285 if ( !in_array( $meta_compare, array( '=', '!=', '>', '>=', '<', '<=', ' like' ) ) )4286 if ( !in_array( $meta_compare, array( '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'IN', 'BETWEEN' ) ) ) 4286 4287 $meta_compare = '='; 4287 4288 4288 4289 if ( empty( $meta_key ) && empty( $meta_value ) ) … … 4299 4300 if ( !empty( $meta_key ) ) 4300 4301 $where .= $wpdb->prepare( " AND $alias.meta_key = %s", $meta_key ); 4301 4302 4303 if ( in_array( $meta_compare, array( 'IN', 'BETWEEN' ) ) ) { 4304 if ( !is_array( $meta_value ) ) 4305 $meta_value = preg_split( '/[,\s]+/', $meta_value ); 4306 } else { 4307 $meta_value = trim( $meta_value ); 4308 } 4309 4302 4310 if ( empty( $meta_value ) ) 4303 4311 continue; 4304 4312 4305 if ( 'like' == $meta_compare ) { 4306 $where .= $wpdb->prepare( " AND $alias.meta_value LIKE %s", '%' . like_escape( $meta_value ) . '%' ); 4313 if ( 'IN' == $meta_compare ) { 4314 $meta_field_types = substr( str_repeat( ',%s', count( $meta_value ) ), 1 ); 4315 $meta_compare_string = "($meta_field_types)"; 4316 unset( $meta_field_types ); 4317 } elseif ( 'BETWEEN' == $meta_compare ) { 4318 $meta_value = array_slice( $meta_value, 0, 2 ); 4319 $meta_compare_string = '%s AND %s'; 4320 } elseif ( 'LIKE' == $meta_compare ) { 4321 $meta_value = '%' . like_escape( $meta_value ) . '%'; 4322 $meta_compare_string = '%s'; 4307 4323 } else { 4308 $ where .= $wpdb->prepare( " AND $alias.meta_value $meta_compare %s", $meta_value );4324 $meta_compare_string = '%s'; 4309 4325 } 4326 $where .= $wpdb->prepare( " AND $alias.meta_value {$meta_compare} {$meta_compare_string}", $meta_value ); 4327 unset($meta_compare_string); 4310 4328 } 4311 4329 4312 4330 return array( $join, $where );