Changeset 15565
- Timestamp:
- 09/05/2010 01:31:33 PM (15 years ago)
- Location:
- trunk/wp-includes
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/functions.php
r15496 r15565 4220 4220 4221 4221 /* 4222 * Used internally to generate an SQL string for searching across multiple meta key = value pairs 4223 * 4224 * @access private 4225 * @since 3.1.0 4226 * 4227 * @param array $queries An array of queries 4228 * @return string 4229 */ 4230 function _wp_meta_sql( $queries, $meta_id_column, $table ) { 4231 global $wpdb; 4232 4233 $clauses = array(); 4234 4235 foreach ( $queries as $query ) { 4236 $meta_key = trim( @$query['meta_key'] ); 4237 $meta_value = trim( @$query['meta_value'] ); 4238 $meta_compare = @$query['meta_compare']; 4239 4240 if ( empty( $meta_compare ) || !in_array( $meta_compare, array( '=', '!=', '>', '>=', '<', '<=', 'like' ) ) ) 4241 $meta_compare = '='; 4242 4243 if ( empty( $meta_key ) ) 4244 continue; 4245 4246 $clause = $wpdb->prepare( "WHEN %s THEN meta_value ", $meta_key ); 4247 4248 if ( empty( $meta_value ) ) { 4249 $clauses[] = $clause . "IS NOT NULL"; 4250 } elseif ( 'like' == $meta_compare ) { 4251 $clauses[] = $clause . $wpdb->prepare( "LIKE %s", '%' . like_escape( $meta_value ) . '%' ); 4252 } else { 4253 $clauses[] = $clause . $wpdb->prepare( "$meta_compare %s", $meta_value ); 4254 } 4255 } 4256 4257 if ( empty( $clauses ) ) 4258 return ''; 4259 4260 return " 4261 SELECT $meta_id_column 4262 FROM $table 4263 WHERE CASE meta_key 4264 " . implode( "\n", $clauses ) . " 4265 END 4266 GROUP BY $meta_id_column 4267 HAVING COUNT(*) = " . count( $clauses ); 4268 } 4269 4270 4271 /* 4222 4272 * Used internally to tidy up the search terms 4223 4273 * -
trunk/wp-includes/user.php
r15543 r15565 380 380 'meta_key' => '', 'meta_value' => '', 381 381 'include' => array(), 'exclude' => array(), 382 'fields' => 'all' 382 'fields' => 'all', 383 383 ) ); 384 384 … … 446 446 $role = trim( $qv['role'] ); 447 447 448 if ( $role || is_multisite() ) { 449 $this->query_from .= " INNER JOIN $wpdb->usermeta ON $wpdb->users.ID = $wpdb->usermeta.user_id"; 450 $this->query_where .= $wpdb->prepare( " AND $wpdb->usermeta.meta_key = %s", $wpdb->prefix . 'capabilities' ); 451 } 448 $meta_queries = array(); 449 450 $cap_meta_query = array(); 451 $cap_meta_key = $wpdb->prefix . 'capabilities'; 452 453 if ( $role || is_multisite() ) 454 $cap_meta_query['meta_key'] = $cap_meta_key; 452 455 453 456 if ( $role ) { 454 $this->query_where .= $wpdb->prepare( " AND $wpdb->usermeta.meta_value LIKE %s", '%' . like_escape( $role ) . '%' ); 455 } 456 457 $meta_key = trim( $qv['meta_key'] ); 458 $meta_value = trim( $qv['meta_value'] ); 459 if ( $meta_key ) { 460 if ( empty( $meta_value ) ) { 461 $subquery = $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = %s", $meta_key ); 462 } 463 else { 464 $subquery = $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = %s AND meta_value = %s", $meta_key, $meta_value ); 465 } 466 467 $this->query_where .= " AND $wpdb->users.ID IN ($subquery)"; 457 $cap_meta_query['meta_value'] = $role; 458 $cap_meta_query['meta_compare'] = 'like'; 459 } 460 461 $meta_queries[] = $cap_meta_query; 462 463 $meta_queries[] = array( 464 'meta_key' => @$qv['meta_key'], 465 'meta_value' => @$qv['meta_key'], 466 'meta_compare' => @$qv['meta_key'], 467 ); 468 469 $meta_query_sql = _wp_meta_sql( $meta_queries, 'user_id', $wpdb->usermeta ); 470 471 if ( !empty( $meta_query_sql ) ) { 472 $this->query_where .= " AND $wpdb->users.ID IN ($meta_query_sql)"; 468 473 } 469 474
Note: See TracChangeset
for help on using the changeset viewer.