BP_Friends_Friendship::get_friendships( int $user_id, array $args = array(), string $operator = 'AND' )
Get the friendships for a given user.
Description
Parameters
- $user_id
-
(int) (Required) ID of the user whose friends are being retrieved.
- $args
-
(array) (Optional) Filter parameters.
- 'id'
(int) ID of specific friendship to retrieve. - 'initiator_user_id'
(int) ID of friendship initiator. - 'friend_user_id'
(int) ID of specific friendship to retrieve. - 'is_confirmed'
(int) Whether the friendship has been accepted. - 'is_limited'
(int) Whether the friendship is limited. - 'order_by'
(string) Column name to order by. - 'sort_order'
(string) ASC or DESC. Default DESC.
Default value: array()
- 'id'
- $operator
-
(string) (Optional) Operator to use in
wp_list_filter()
.Default value: 'AND'
Return
(array) $friendships Array of friendship objects.
Source
File: bp-friends/classes/class-bp-friends-friendship.php
public static function get_friendships( $user_id, $args = array(), $operator = 'AND' ) { if ( empty( $user_id ) ) { $user_id = bp_loggedin_user_id(); } $r = bp_parse_args( $args, array( 'id' => null, 'initiator_user_id' => null, 'friend_user_id' => null, 'is_confirmed' => null, 'is_limited' => null, 'order_by' => 'date_created', 'sort_order' => 'DESC', 'page' => null, 'per_page' => null ), 'bp_get_user_friendships' ); // First, we get all friendships that involve the user. $friendship_ids = wp_cache_get( $user_id, 'bp_friends_friendships_for_user' ); if ( false === $friendship_ids ) { $friendship_ids = self::get_friendship_ids_for_user( $user_id ); wp_cache_set( $user_id, $friendship_ids, 'bp_friends_friendships_for_user' ); } // Prime the membership cache. $uncached_friendship_ids = bp_get_non_cached_ids( $friendship_ids, 'bp_friends_friendships' ); if ( ! empty( $uncached_friendship_ids ) ) { $uncached_friendships = self::get_friendships_by_id( $uncached_friendship_ids ); foreach ( $uncached_friendships as $uncached_friendship ) { wp_cache_set( $uncached_friendship->id, $uncached_friendship, 'bp_friends_friendships' ); } } // Assemble filter array. $filters = wp_array_slice_assoc( $r, array( 'id', 'initiator_user_id', 'friend_user_id', 'is_confirmed', 'is_limited' ) ); foreach ( $filters as $filter_name => $filter_value ) { if ( is_null( $filter_value ) ) { unset( $filters[ $filter_name ] ); } } // Populate friendship array from cache, and normalize. $friendships = array(); $int_keys = array( 'id', 'initiator_user_id', 'friend_user_id' ); $bool_keys = array( 'is_confirmed', 'is_limited' ); foreach ( $friendship_ids as $friendship_id ) { // Create a limited BP_Friends_Friendship object (don't fetch the user details). $friendship = new BP_Friends_Friendship( $friendship_id, false, false ); // Sanity check. if ( ! isset( $friendship->id ) ) { continue; } // Integer values. foreach ( $int_keys as $index ) { $friendship->{$index} = intval( $friendship->{$index} ); } // Boolean values. foreach ( $bool_keys as $index ) { $friendship->{$index} = (bool) $friendship->{$index}; } // We need to support the same operators as wp_list_filter(). if ( 'OR' == $operator || 'NOT' == $operator ) { $matched = 0; foreach ( $filters as $filter_name => $filter_value ) { if ( isset( $friendship->{$filter_name} ) && $filter_value == $friendship->{$filter_name} ) { $matched++; } } if ( ( 'OR' == $operator && $matched > 0 ) || ( 'NOT' == $operator && 0 == $matched ) ) { $friendships[ $friendship->id ] = $friendship; } } else { /* * This is the more typical 'AND' style of filter. * If any of the filters miss, we move on. */ foreach ( $filters as $filter_name => $filter_value ) { if ( ! isset( $friendship->{$filter_name} ) || $filter_value != $friendship->{$filter_name} ) { continue 2; } } $friendships[ $friendship->id ] = $friendship; } } // Sort the results on a column name. if ( in_array( $r['order_by'], array( 'id', 'initiator_user_id', 'friend_user_id' ) ) ) { $friendships = bp_sort_by_key( $friendships, $r['order_by'], 'num', true ); } // Adjust the sort direction of the results. if ( 'ASC' === strtoupper( $r['sort_order'] ) ) { // `true` to preserve keys. $friendships = array_reverse( $friendships, true ); } // Paginate the results. if ( $r['per_page'] && $r['page'] ) { $start = ( $r['page'] - 1 ) * ( $r['per_page'] ); $friendships = array_slice( $friendships, $start, $r['per_page'] ); } return $friendships; }
Changelog
Version | Description |
---|---|
BuddyPress 2.6.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.