BP_Group_Member_Query::get_group_member_ids()
Get the members of the queried group.
Description
Return
(array) $ids User IDs of relevant group member ids.
Source
File: bp-groups/classes/class-bp-group-member-query.php
protected function get_group_member_ids() { global $wpdb; if ( is_array( $this->group_member_ids ) ) { return $this->group_member_ids; } $bp = buddypress(); $sql = array( 'select' => "SELECT user_id FROM {$bp->groups->table_name_members}", 'where' => array(), 'orderby' => '', 'order' => '', ); /* WHERE clauses *****************************************************/ // Group id. $group_ids = wp_parse_id_list( $this->query_vars['group_id'] ); $group_ids = implode( ',', $group_ids ); $sql['where'][] = "group_id IN ({$group_ids})"; // If is_confirmed. $is_confirmed = ! empty( $this->query_vars['is_confirmed'] ) ? 1 : 0; $sql['where'][] = $wpdb->prepare( "is_confirmed = %d", $is_confirmed ); // If invite_sent. if ( ! is_null( $this->query_vars['invite_sent'] ) ) { $invite_sent = ! empty( $this->query_vars['invite_sent'] ) ? 1 : 0; $sql['where'][] = $wpdb->prepare( "invite_sent = %d", $invite_sent ); } // If inviter_id. if ( ! is_null( $this->query_vars['inviter_id'] ) ) { $inviter_id = $this->query_vars['inviter_id']; // Empty: inviter_id = 0. (pass false, 0, or empty array). if ( empty( $inviter_id ) ) { $sql['where'][] = "inviter_id = 0"; // The string 'any' matches any non-zero value (inviter_id != 0). } elseif ( 'any' === $inviter_id ) { $sql['where'][] = "inviter_id != 0"; // Assume that a list of inviter IDs has been passed. } else { // Parse and sanitize. $inviter_ids = wp_parse_id_list( $inviter_id ); if ( ! empty( $inviter_ids ) ) { $inviter_ids_sql = implode( ',', $inviter_ids ); $sql['where'][] = "inviter_id IN ({$inviter_ids_sql})"; } } } // Role information is stored as follows: admins have // is_admin = 1, mods have is_mod = 1, banned have is_banned = // 1, and members have all three set to 0. $roles = !empty( $this->query_vars['group_role'] ) ? $this->query_vars['group_role'] : array(); if ( is_string( $roles ) ) { $roles = explode( ',', $roles ); } // Sanitize: Only 'admin', 'mod', 'member', and 'banned' are valid. $allowed_roles = array( 'admin', 'mod', 'member', 'banned' ); foreach ( $roles as $role_key => $role_value ) { if ( ! in_array( $role_value, $allowed_roles ) ) { unset( $roles[ $role_key ] ); } } $roles = array_unique( $roles ); // When querying for a set of roles containing 'member' (for // which there is no dedicated is_ column), figure out a list // of columns *not* to match. $roles_sql = ''; if ( in_array( 'member', $roles ) ) { $role_columns = array(); foreach ( array_diff( $allowed_roles, $roles ) as $excluded_role ) { $role_columns[] = 'is_' . $excluded_role . ' = 0'; } if ( ! empty( $role_columns ) ) { $roles_sql = '(' . implode( ' AND ', $role_columns ) . ')'; } // When querying for a set of roles *not* containing 'member', // simply construct a list of is_* = 1 clauses. } else { $role_columns = array(); foreach ( $roles as $role ) { $role_columns[] = 'is_' . $role . ' = 1'; } if ( ! empty( $role_columns ) ) { $roles_sql = '(' . implode( ' OR ', $role_columns ) . ')'; } } if ( ! empty( $roles_sql ) ) { $sql['where'][] = $roles_sql; } $sql['where'] = ! empty( $sql['where'] ) ? 'WHERE ' . implode( ' AND ', $sql['where'] ) : ''; // We fetch group members in order of last_joined, regardless // of 'type'. If the 'type' value is not 'last_joined' or // 'first_joined', the order will be overridden in // BP_Group_Member_Query::set_orderby(). if ( $this->query_vars['type'] === 'group_role' ) { $sql['orderby'] = "ORDER BY -is_admin, -is_mod, date_modified"; } else { $sql['orderby'] = "ORDER BY date_modified"; } $sql['order'] = 'first_joined' === $this->query_vars['type'] ? 'ASC' : 'DESC'; $this->group_member_ids = $wpdb->get_col( "{$sql['select']} {$sql['where']} {$sql['orderby']} {$sql['order']}" ); /** * Filters the member IDs for the current group member query. * * Use this filter to build a custom query (such as when you've * defined a custom 'type'). * * @since BuddyPress 2.0.0 * * @param array $group_member_ids Array of associated member IDs. * @param BP_Group_Member_Query $this Current BP_Group_Member_Query instance. */ $this->group_member_ids = apply_filters( 'bp_group_member_query_group_member_ids', $this->group_member_ids, $this ); return $this->group_member_ids; }
Changelog
Version | Description |
---|---|
BuddyPress 1.8.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.