Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get the BuddyPress activity id from the avatar

When an user upload an new avatar, the avatar is posted in the activity wall. How can I get this activity ID by using the userId?

I think the only way is to create an own query, right?

like image 393
Peter Avatar asked Mar 27 '16 03:03

Peter


1 Answers

You can write a query to get that activity. There is also a filter you can hook into which will get called after the avatar is uploaded (explained later):

<?php

global $wpdb;

$query = "SELECT * FROM {$wpdb->prefix}bp_activity WHERE " .
         "`type` = 'new_avatar' AND `user_id` = %d " .
         "ORDER BY `date_recorded` DESC LIMIT 1";

$result = 
$wpdb->get_row(
    $wpdb->prepare($query, $user_id)
);

if ($result) {
    // found an activity item for avatar upload
    var_dump($result);
} else {
    // user has not uploaded an avatar
}

Result looks like:

stdClass Object
(
    [id] => 2   <-- this is the activity ID
    [user_id] => 1
    [component] => profile
    [type] => new_avatar
    [action] => admin changed their profile picture
    [content] => 
    [primary_link] => http://example.com/wordpress/members/admin/
    [item_id] => 0
    [secondary_item_id] => 0
    [date_recorded] => 2016-03-29 04:41:53
    [hide_sitewide] => 0
    [mptt_left] => 0
    [mptt_right] => 0
    [is_spam] => 0
)

There is an action that is called which you can hook into that will be called when this activity takes place. It is xprofile_avatar_uploaded and it passes two parameters, $item_id (user ID), and $type (e.g. crop or camera). This filter is executed after an avatar is uploaded.

Somewhere in your functions, add:

add_action('xprofile_avatar_uploaded', 'callback');

function callback($user_id, $type)
{
    // $user_id uploaded new avatar
}

I found you can also call:

$img = bp_get_activity_avatar(['user_id' => $user_id]);

to get the HTML to display the avatar. They are stored in wp-content/uploads/avatars.

You can also call:

$url = bp_core_fetch_avatar(['item_id' => $user_id, 'html' => false]);

to get just the full URL of the avatar.

like image 182
drew010 Avatar answered Sep 19 '22 07:09

drew010