| | 236 | /** |
| | 237 | * Fetch BuddyPress extra data for a user. |
| | 238 | * |
| | 239 | * @since 7.0.0 |
| | 240 | * |
| | 241 | * @param int $user_id The BP Member ID. |
| | 242 | * @param bool $populate_extras True to fetch BP extra data. False otherwise. |
| | 243 | * Default `true`. |
| | 244 | * @param string $context How to sanitize user fields. Looks for 'raw', 'edit', 'db', 'display', |
| | 245 | * 'attribute' and 'js'. Default 'raw'. |
| | 246 | * @return WP_User The user object extended with BuddyPress extra data. |
| | 247 | */ |
| | 248 | function bp_members_get_userdata( $user_id = 0, $populate_extras = true, $context = 'raw' ) { |
| | 249 | if ( ! $user_id ) { |
| | 250 | return false; |
| | 251 | } |
| | 252 | |
| | 253 | if ( ! $populate_extras ) { |
| | 254 | return bp_core_get_core_userdata( $user_id ); |
| | 255 | } |
| | 256 | |
| | 257 | $userdata = get_user_by( 'ID', (int) $user_id ); |
| | 258 | |
| | 259 | if ( ! isset( $userdata->ID ) || ! $userdata->ID ) { |
| | 260 | return false; |
| | 261 | } |
| | 262 | |
| | 263 | // The BP_Core_User is using the deprecated `id` property of the WP_User object. |
| | 264 | $bp_member = new stdClass(); |
| | 265 | foreach ( get_object_vars( $userdata ) as $key => $data ) { |
| | 266 | $bp_member->{$key} = $data; |
| | 267 | } |
| | 268 | |
| | 269 | $bp_member->id = $bp_member->ID; |
| | 270 | |
| | 271 | $paged_users = array( $bp_member ); |
| | 272 | $user_ids = array( $bp_member->ID ); |
| | 273 | BP_Core_User::get_user_extras( $paged_users, $user_ids, $type = 'alphabetical' ); |
| | 274 | |
| | 275 | // We only need the first index of the array. |
| | 276 | $bp_member = reset( $paged_users ); |
| | 277 | |
| | 278 | // Remove the password. |
| | 279 | unset( $bp_member->data->user_pass ); |
| | 280 | |
| | 281 | // Set the BP User domain. |
| | 282 | $bp_member->data->user_url = bp_core_get_user_domain( $bp_member->ID, $bp_member->data->user_nicename, $bp_member->data->user_login ); |
| | 283 | |
| | 284 | $user = new WP_User( $bp_member->data ); |
| | 285 | $user->filter = $context; |
| | 286 | |
| | 287 | foreach ( array_keys( get_object_vars( $user->data ) ) as $wp_prop ) { |
| | 288 | $bp_member->data->{$wp_prop} = $user->{$wp_prop}; |
| | 289 | } |
| | 290 | |
| | 291 | // Remove unnecessary data. |
| | 292 | $bp_data = array_diff_key( |
| | 293 | get_object_vars( $bp_member ), |
| | 294 | array( |
| | 295 | 'ID' => false, |
| | 296 | 'data' => false, |
| | 297 | 'filter' => false, |
| | 298 | 'roles' => false, |
| | 299 | 'caps' => false, |
| | 300 | 'cap_key' => false, |
| | 301 | ) |
| | 302 | ); |
| | 303 | |
| | 304 | // Include data specific to BuddyPress. |
| | 305 | foreach ( array_keys( $bp_data ) as $bp_prop ) { |
| | 306 | $bp_member->data->{$bp_prop} = $bp_member->{$bp_prop}; |
| | 307 | } |
| | 308 | |
| | 309 | /** |
| | 310 | * Filter here to add other extra data for the member. |
| | 311 | * |
| | 312 | * @since 7.0.0 |
| | 313 | * |
| | 314 | * @param object $data The user data including the data specific to BuddyPress. |
| | 315 | * @param WP_User $user The WordPress user object. |
| | 316 | */ |
| | 317 | return apply_filters( 'bp_members_get_userdata', $bp_member->data, $user ); |
| | 318 | } |
| | 319 | |