wp-includes/class-wp-user-query.php:265Prepares the query variables.
$querystring|arrayoptionalarray()$blog_idintdefault: is the current site
$rolestring|string[]default: empty
$role__instring[]default: empty array
$role__not_instring[]default: empty array
$meta_keystring|string[]
$meta_valuestring|string[]
$meta_comparestring
$meta_compare_keystring
$meta_typestring
$meta_type_keystring
$meta_queryarray
$capabilitystring|string[]default: empty
$capability__instring[]default: empty array
$capability__not_instring[]default: empty array
$includeint[]default: empty array
$excludeint[]default: empty array
$searchstringdefault: empty
$search_columnsstring[]default: empty array
$orderbystring|arraydefault: 'user_login'
$orderstringdefault: 'ASC'
$offsetintdefault: 0
$numberintdefault: -1 (all users)
$pagedintdefault: 1
$count_totalbooldefault: true
$fieldsstring|string[]default: 'all'
$whostringdefault: empty (all users)
$has_published_postsbool|string[]
$nicenamestringdefault: empty
$nicename__instring[]default: empty array
$nicename__not_instring[]default: empty array
$loginstringdefault: empty
$login__instring[]default: empty array
$login__not_instring[]default: empty array
$cache_resultsbooldefault: true
3 hooks fire while WP_User_Query::prepare_query() runs, in this order:
Fires before the WP_User_Query has been parsed.
Filters the columns to search in a WP_User_Query search.
Fires after the WP_User_Query has been parsed, and before the query is executed.
public function prepare_query( $query = array() ) { global $wpdb, $wp_roles; if ( empty( $this->query_vars ) || ! empty( $query ) ) { $this->query_limit = null; $this->query_vars = $this->fill_query_vars( $query ); } /** * Fires before the WP_User_Query has been parsed. * * The passed WP_User_Query object contains the query variables, * not yet passed into SQL. * * @since 4.0.0 * * @param WP_User_Query $query Current instance of WP_User_Query (passed by reference). */ do_action_ref_array( 'pre_get_users', array( &$this ) ); // Ensure that query vars are filled after 'pre_get_users'. $qv =& $this->query_vars; $qv = $this->fill_query_vars( $qv ); $allowed_fields = array( 'id', 'user_login', 'user_pass', 'user_nicename', 'user_email', 'user_url', 'user_registered', 'user_activation_key', 'user_status', 'display_name', ); if ( is_multisite() ) { $allowed_fields[] = 'spam'; $allowed_fields[] = 'deleted'; } if ( is_array( $qv['fields'] ) ) { $qv['fields'] = array_map( 'strtolower', $qv['fields'] ); $qv['fields'] = array_intersect( array_unique( $qv['fields'] ), $allowed_fields ); if ( empty( $qv['fields'] ) ) { $qv['fields'] = array( 'id' ); } $this->query_fields = array(); foreach ( $qv['fields'] as $field ) { $field = 'id' === $field ? 'ID' : sanitize_key( $field ); $this->query_fields[] = "$wpdb->users.$field"; } $this->query_fields = implode( ',', $this->query_fields ); } elseif ( 'all_with_meta' === $qv['fields'] || 'all' === $qv['fields'] || ! in_array( $qv['fields'], $allowed_fields, true ) ) { $this->query_fields = "$wpdb->users.ID"; } else { $field = 'id' === strtolower( $qv['fields'] ) ? 'ID' : sanitize_key( $qv['fields'] ); $this->query_fields = "$wpdb->users.$field"; } if ( isset( $qv['count_total'] ) && $qv['count_total'] ) { $this->query_fields = 'SQL_CALC_FOUND_ROWS ' . $this->query_fields; } $this->query_from = "FROM $wpdb->users"; $this->query_where = 'WHERE 1=1'; // Parse and sanitize 'include', for use by 'orderby' as well as 'include' below. if ( ! empty( $qv['include'] ) ) { $include = wp_parse_id_list( $qv['include'] ); } else { $include = false; } $blog_id = 0; if ( isset( $qv['blog_id'] ) ) { $blog_id = absint( $qv['blog_id'] ); }Introduced in 5.3.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
src/wp-includes/class-wp-user-query.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.