BP_User_Query::do_wp_user_query()
Use WP_User_Query() to pull data for the user IDs retrieved in the main query.
Description
Source
File: bp-core/classes/class-bp-user-query.php
public function do_wp_user_query() {
$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() ) {
$fields[] = 'spam';
$fields[] = 'deleted';
}
/**
* Filters the WP User Query arguments before passing into the class.
*
* @since BuddyPress 1.7.0
*
* @param array $value Array of arguments for the user query.
* @param BP_User_Query $this Current BP_User_Query instance.
*/
$wp_user_query = new WP_User_Query( apply_filters( 'bp_wp_user_query_args', array(
// Relevant.
'fields' => $fields,
'include' => $this->user_ids,
// Overrides
'blog_id' => 0, // BP does not require blog roles.
'count_total' => false // We already have a count.
), $this ) );
// We calculate total_users using a standalone query, except
// when a whitelist of user_ids is passed to the constructor.
// This clause covers the latter situation, and ensures that
// pagination works when querying by $user_ids.
if ( empty( $this->total_users ) ) {
$this->total_users = count( $wp_user_query->results );
}
// Reindex for easier matching.
$r = array();
foreach ( $wp_user_query->results as $u ) {
$r[ $u->ID ] = $u;
}
// Match up to the user ids from the main query.
foreach ( $this->user_ids as $key => $uid ) {
if ( isset( $r[ $uid ] ) ) {
$r[ $uid ]->ID = (int) $uid;
$r[ $uid ]->user_status = (int) $r[ $uid ]->user_status;
$this->results[ $uid ] = $r[ $uid ];
// The BP template functions expect an 'id'
// (as opposed to 'ID') property.
$this->results[ $uid ]->id = (int) $uid;
// Remove user ID from original user_ids property.
} else {
unset( $this->user_ids[ $key ] );
}
}
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 1.7.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.