Make WordPress Core


Ignore:
Timestamp:
09/05/2010 01:31:33 PM (14 years ago)
Author:
scribu
Message:

introduce _wp_meta_sql(). Preparation for adding blog_id to WP_User_Query. See #14572

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/user.php

    r15543 r15565  
    380380                'meta_key' => '', 'meta_value' => '',
    381381                'include' => array(), 'exclude' => array(),
    382                 'fields' => 'all'
     382                'fields' => 'all',
    383383            ) );
    384384
     
    446446        $role = trim( $qv['role'] );
    447447
    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;
    452455
    453456        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)";
    468473        }
    469474
Note: See TracChangeset for help on using the changeset viewer.