2016-03-27 29 views
9

ユーザーが新しいアバターをアップロードすると、アバターがアクティビティ壁に表示されます。 userIdを使用してこのアクティビティIDを取得するにはどうすればよいですか?アバターからBuddyPressアクティビティIDを取得

私は唯一の方法は、独自のクエリを作成することだと思いますよね?

+0

彼らはそれを正しく解決しましたか? – GeorgeWL

答えて

6

このアクティビティを取得するためのクエリを作成できます。 (後述)アバターがアップロードされた後、あなたはその中にフックすることができ、フィルタが呼び出されますもあります:あなたと呼ばれるアクションがあり

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 
) 

:よう

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

結果が見えますこのアクティビティが発生したときに呼び出されるフックを挿入できます。それはxprofile_avatar_uploadedであり、$item_id(ユーザーID)と$type(例えば、クロップまたはカメラ)の2つのパラメーターを渡します。このフィルタは、アバターがアップロードされた後に実行されます。あなたの関数で

どこかには、追加:

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

速い返答をありがとう。フィルターは毎回呼び出されます(アバターがアップロードされてから1回だけでなく)。私の考えは、アバターが正常に変更された後、user_metaフィールドにアクティビティIDを格納することです。あなたは私に正しいフックを与えてくれますか? – Peter

+0

こんにちは、私は答えを編集した、私は 'xprofile_avatar_uploaded'アクションがより正確だと思う。私が知る限り、それは成功したアバターのアップロード後にのみ呼び出されます。 – drew010

関連する問題