Ticket #9124: 9124.6.diff
File 9124.6.diff, 2.2 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['key'] ) ? trim( $q['key'] ) : ''; 4282 $meta_value = isset( $q['value'] ) ? trim( $q['value'] ): '';4282 $meta_value = isset( $q['value'] ) ? $q['value'] : ''; 4283 4283 $meta_compare = isset( $q['compare'] ) ? $q['compare'] : '='; 4284 $meta_compare = strtoupper( $meta_compare ); 4285 $numeric = ( isset( $q['numeric'] ) && $q['numeric'] )? '+0':''; 4284 4286 4285 if ( !in_array( $meta_compare, array( '=', '!=', '>', '>=', '<', '<=', ' like' ) ) )4287 if ( !in_array( $meta_compare, array( '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'IN', 'BETWEEN' ) ) ) 4286 4288 $meta_compare = '='; 4287 4289 4288 4290 if ( empty( $meta_key ) && empty( $meta_value ) ) … … 4299 4301 if ( !empty( $meta_key ) ) 4300 4302 $where .= $wpdb->prepare( " AND $alias.meta_key = %s", $meta_key ); 4301 4303 4304 if ( in_array( $meta_compare, array( 'IN', 'BETWEEN' ) ) ) { 4305 if ( !is_array( $meta_value ) ) 4306 $meta_value = preg_split( '/[,\s]+/', $meta_value ); 4307 } else { 4308 $meta_value = trim( $meta_value ); 4309 } 4310 4302 4311 if ( empty( $meta_value ) ) 4303 4312 continue; 4304 4313 4305 if ( 'like' == $meta_compare ) { 4306 $where .= $wpdb->prepare( " AND $alias.meta_value LIKE %s", '%' . like_escape( $meta_value ) . '%' ); 4314 if ( 'IN' == $meta_compare ) { 4315 $meta_field_types = substr( str_repeat( ',%s', count( $meta_value ) ), 1 ); 4316 $meta_compare_string = "($meta_field_types)"; 4317 unset( $meta_field_types ); 4318 } elseif ( 'BETWEEN' == $meta_compare ) { 4319 $meta_value = array_slice( $meta_value, 0, 2 ); 4320 $meta_compare_string = '%s AND %s'; 4321 } elseif ( 'LIKE' == $meta_compare ) { 4322 $meta_value = '%' . like_escape( $meta_value ) . '%'; 4323 $meta_compare_string = '%s'; 4307 4324 } else { 4308 $ where .= $wpdb->prepare( " AND $alias.meta_value $meta_compare %s", $meta_value );4325 $meta_compare_string = '%s'; 4309 4326 } 4327 $where .= $wpdb->prepare( " AND $alias.meta_value{$numeric} {$meta_compare} {$meta_compare_string}", $meta_value ); 4328 unset($meta_compare_string); 4310 4329 } 4311 4330 4312 4331 return array( $join, $where );