bp_get_user_groups( int $user_id, array $args = array() )
Get a list of groups of which the specified user is a member.
Description Description
Get a list of the groups to which this member belongs, filtered by group membership status and role. Usage examples: Used with no arguments specified,
bp_get_user_groups( bp_loggedin_user_id() );
returns an array of the groups in which the logged-in user is an unpromoted member. To fetch an array of all groups that the current user belongs to, in any membership role, member, moderator or administrator, use
bp_get_user_groups( $user_id, array( ‘is_admin’ => null, ‘is_mod’ => null, ) );
Parameters Parameters
- $user_id
-
(Required) ID of the user.
- $args
-
(Optional) Array of optional args. @param bool|null $is_confirmed Whether to return only confirmed memberships. Pass
nullto disable this filter. Default: true. @param bool|null $is_banned Whether to return only banned memberships. Passnullto disable this filter. Default: false. @param bool|null $is_admin Whether to return only admin memberships. Passnullto disable this filter. Default: false. @param bool|null $is_mod Whether to return only mod memberships. Passnullto disable this filter. Default: false. @param bool|null $invite_sent Whether to return only memberships with 'invite_sent'. Passnullto disable this filter. Default: false. @param string $orderby Field to order by. Accepts 'id' (membership ID), 'group_id', 'date_modified'. Default: 'group_id'. @param string $order Sort order. Accepts 'ASC' or 'DESC'. Default: 'ASC'.Default value: array()
Return Return
(array) Array of matching group memberships, keyed by group ID.
Source Source
File: bp-groups/bp-groups-functions.php
function bp_get_user_groups( $user_id, $args = array() ) {
$r = bp_parse_args( $args, array(
'is_confirmed' => true,
'is_banned' => false,
'is_admin' => false,
'is_mod' => false,
'invite_sent' => null,
'orderby' => 'group_id',
'order' => 'ASC',
), 'get_user_groups' );
$user_id = intval( $user_id );
// Standard memberships
$membership_ids = wp_cache_get( $user_id, 'bp_groups_memberships_for_user' );
if ( false === $membership_ids ) {
$membership_ids = BP_Groups_Member::get_membership_ids_for_user( $user_id );
wp_cache_set( $user_id, $membership_ids, 'bp_groups_memberships_for_user' );
}
// Prime the membership cache.
$uncached_membership_ids = bp_get_non_cached_ids( $membership_ids, 'bp_groups_memberships' );
if ( ! empty( $uncached_membership_ids ) ) {
$uncached_memberships = BP_Groups_Member::get_memberships_by_id( $uncached_membership_ids );
foreach ( $uncached_memberships as $uncached_membership ) {
wp_cache_set( $uncached_membership->id, $uncached_membership, 'bp_groups_memberships' );
}
}
// Prime the invitations- and requests-as-memberships cache
$invitation_ids = array();
if ( true !== $r['is_confirmed'] || false !== $r['invite_sent'] ) {
$invitation_ids = groups_get_invites( array(
'user_id' => $user_id,
'invite_sent' => 'all',
'type' => 'all',
'fields' => 'ids'
) );
// Prime the invitations cache.
$uncached_invitation_ids = bp_get_non_cached_ids( $invitation_ids, 'bp_groups_invitations_as_memberships' );
if ( $uncached_invitation_ids ) {
$uncached_invitations = groups_get_invites( array(
'id' => $uncached_invitation_ids,
'invite_sent' => 'all',
'type' => 'all'
) );
foreach ( $uncached_invitations as $uncached_invitation ) {
// Reshape the result as a membership db entry.
$invitation = new StdClass;
$invitation->id = $uncached_invitation->id;
$invitation->group_id = $uncached_invitation->item_id;
$invitation->user_id = $uncached_invitation->user_id;
$invitation->inviter_id = $uncached_invitation->inviter_id;
$invitation->is_admin = false;
$invitation->is_mod = false;
$invitation->user_title = '';
$invitation->date_modified = $uncached_invitation->date_modified;
$invitation->comments = $uncached_invitation->content;
$invitation->is_confirmed = false;
$invitation->is_banned = false;
$invitation->invite_sent = $uncached_invitation->invite_sent;
wp_cache_set( $uncached_invitation->id, $invitation, 'bp_groups_invitations_as_memberships' );
}
}
}
// Assemble filter array for use in `wp_list_filter()`.
$filters = wp_array_slice_assoc( $r, array( 'is_confirmed', 'is_banned', 'is_admin', 'is_mod', 'invite_sent' ) );
foreach ( $filters as $filter_name => $filter_value ) {
if ( is_null( $filter_value ) ) {
unset( $filters[ $filter_name ] );
}
}
// Populate group membership array from cache, and normalize.
$groups = array();
$int_keys = array( 'id', 'group_id', 'user_id', 'inviter_id' );
$bool_keys = array( 'is_admin', 'is_mod', 'is_confirmed', 'is_banned', 'invite_sent' );
foreach ( $membership_ids as $membership_id ) {
$membership = wp_cache_get( $membership_id, 'bp_groups_memberships' );
// Sanity check.
if ( ! isset( $membership->group_id ) ) {
continue;
}
// Integer values.
foreach ( $int_keys as $index ) {
$membership->{$index} = intval( $membership->{$index} );
}
// Boolean values.
foreach ( $bool_keys as $index ) {
$membership->{$index} = (bool) $membership->{$index};
}
foreach ( $filters as $filter_name => $filter_value ) {
if ( ! isset( $membership->{$filter_name} ) || $filter_value != $membership->{$filter_name} ) {
continue 2;
}
}
$group_id = (int) $membership->group_id;
$groups[ $group_id ] = $membership;
}
// Populate group invitations array from cache, and normalize.
foreach ( $invitation_ids as $invitation_id ) {
$invitation = wp_cache_get( $invitation_id, 'bp_groups_invitations_as_memberships' );
// Sanity check.
if ( ! isset( $invitation->group_id ) ) {
continue;
}
// Integer values.
foreach ( $int_keys as $index ) {
$invitation->{$index} = intval( $invitation->{$index} );
}
// Boolean values.
foreach ( $bool_keys as $index ) {
$invitation->{$index} = (bool) $invitation->{$index};
}
foreach ( $filters as $filter_name => $filter_value ) {
if ( ! isset( $invitation->{$filter_name} ) || $filter_value != $invitation->{$filter_name} ) {
continue 2;
}
}
$group_id = (int) $invitation->group_id;
$groups[ $group_id ] = $invitation;
}
// By default, results are ordered by membership id.
if ( 'group_id' === $r['orderby'] ) {
ksort( $groups );
} elseif ( in_array( $r['orderby'], array( 'id', 'date_modified' ) ) ) {
$groups = bp_sort_by_key( $groups, $r['orderby'] );
}
// By default, results are ordered ASC.
if ( 'DESC' === strtoupper( $r['order'] ) ) {
// `true` to preserve keys.
$groups = array_reverse( $groups, true );
}
return $groups;
}
Changelog Changelog
| Version | Description |
|---|---|
| 2.6.0 | Introduced. |