BP_Friends_Friendship::update_bp_friends_cache( int $user_id, int|array|string $possible_friend_ids )
Find uncached friendships between a user and one or more other users and cache them.
Description
Parameters
- $user_id
-
(Required) The ID of the primary user for whom we want to check friendships statuses.
- $possible_friend_ids
-
(Required) The IDs of the one or more users to check friendship status with primary user.
Return
(null)
Source
File: bp-friends/classes/class-bp-friends-friendship.php
public static function update_bp_friends_cache( $user_id, $possible_friend_ids ) { global $wpdb; $bp = buddypress(); $possible_friend_ids = wp_parse_id_list( $possible_friend_ids ); $fetch = array(); foreach ( $possible_friend_ids as $friend_id ) { // Check for cached items in both friendship directions. if ( false === bp_core_get_incremented_cache( $user_id . ':' . $friend_id, 'bp_friends' ) || false === bp_core_get_incremented_cache( $friend_id . ':' . $user_id, 'bp_friends' ) ) { $fetch[] = $friend_id; } } if ( empty( $fetch ) ) { return; } $friend_ids_sql = implode( ',', array_unique( $fetch ) ); $sql = $wpdb->prepare( "SELECT initiator_user_id, friend_user_id, is_confirmed FROM {$bp->friends->table_name} WHERE (initiator_user_id = %d AND friend_user_id IN ({$friend_ids_sql}) ) OR (initiator_user_id IN ({$friend_ids_sql}) AND friend_user_id = %d )", $user_id, $user_id ); $friendships = $wpdb->get_results( $sql ); // Use $handled to keep track of all of the $possible_friend_ids we've matched. $handled = array(); foreach ( $friendships as $friendship ) { $initiator_user_id = (int) $friendship->initiator_user_id; $friend_user_id = (int) $friendship->friend_user_id; if ( 1 === (int) $friendship->is_confirmed ) { $status_initiator = $status_friend = 'is_friend'; } else { $status_initiator = 'pending'; $status_friend = 'awaiting_response'; } bp_core_set_incremented_cache( $initiator_user_id . ':' . $friend_user_id, 'bp_friends', $status_initiator ); bp_core_set_incremented_cache( $friend_user_id . ':' . $initiator_user_id, 'bp_friends', $status_friend ); $handled[] = ( $initiator_user_id === $user_id ) ? $friend_user_id : $initiator_user_id; } // Set all those with no matching entry to "not friends" status. $not_friends = array_diff( $fetch, $handled ); foreach ( $not_friends as $not_friend_id ) { bp_core_set_incremented_cache( $user_id . ':' . $not_friend_id, 'bp_friends', 'not_friends' ); bp_core_set_incremented_cache( $not_friend_id . ':' . $user_id, 'bp_friends', 'not_friends' ); } }
Changelog
Version | Description |
---|---|
BuddyPress 3.0.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.