2016-03-27 6 views
9

Когда пользователь загружает новый аватар, аватар отправляется в стенку активности. Как я могу получить этот идентификатор активности с помощью userId?Получите идентификатор активности BuddyPress от аватара

Я думаю, что единственный способ - создать собственный запрос, не так ли?

+0

они решили это правильно? – GeorgeWL

ответ

6

Вы можете написать запрос, чтобы получить эту активность. Существует также фильтр можно подключить, в который будет вызван после того, как аватар будет загружен (объясню позже):

<?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 
} 

Результат выглядит следующим образом:

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 
) 

Существует действие, которое называется которой вы может подключаться к тому, что будет вызываться, когда эта деятельность имеет место. Это xprofile_avatar_uploaded, и он передает два параметра: $item_id (идентификатор пользователя) и $type (например, обрезка или камера). Этот фильтр выполняется после загрузки аватара.

Где-то в ваших функциях, добавьте:

add_action('xprofile_avatar_uploaded', 'callback'); 

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

Я нашел вы также можете позвонить:

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

, чтобы получить HTML для отображения аватара. Они хранятся в wp-content/uploads/avatars.

Вы также можете позвонить:

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

получить только полный URL аватара.

+0

Спасибо за быстрый ответ. Фильтр вызывается каждый раз (не только один раз после загрузки аватара). Моя идея состоит в том, чтобы сохранить идентификатор активности в полях user_meta после успешного изменения аватара. Не могли бы вы дать мне правильный крючок? – Peter

+0

Привет, я отредактировал ответ, я считаю, что действие 'xprofile_avatar_uploaded' является более точным. Насколько я могу судить, он вызывается только после успешной загрузки аватара. – drew010