BuddyPress 用の plugin を作っている中で、ドキュメントであまり解説されてなかった内部関数とかフックとかについて使い方を調べたので、忘れないうちにメモ。
$bp は BuddyPress クラスです。参照するときは global $bp; と宣言してください。
関数とかプロパティとか
bp_is_member()
Member Profile を含む画面であるかどうかを判断する関数、であるはずなのだけど、1.5系ではバグがあって正しい値を返してくれないっぽい(少なくともwp_head
フック内では返してくれなかった)。仕方が無いので、今のところ $bp->displayed_user->id > 0
で判定してる。
bp_is_group()
Group Profile を含む画面であるかどうかを判断する関数。Group の Home, Admin, Forum, Wiki, Members, Send Invites で true になることを確認済み。Group Directory では false の模様。wp_head
フック内でも行ける。
bp_get_group_permalink()
Group Home への permalink を返す関数。Group Profile を含む画面のとき、例えば bp_before_group_header_meta
フックから引数無しで呼ぶと (おそらく Groups Loop の中にいるお陰で) 今の Group の URL を返してくれる。ヘッダ作成のために wp_head
フックから呼ぶ場合は (おそらく Groups Loop の外なので) 引数無しではダメで、bp_get_group_permalink( $bp->groups->current_group )
として呼ぶ必要がある。
$bp->displayed_user->id
Member Profile を含む画面で、表示ユーザのユーザID (Integer)を返す。wp_head
フックから呼んでも、今表示されてるユーザのIDを返してくれるっぽい。後述する xprofile_get_field_data()
とかで使う。
$bp->displayed_user->domain
Member Profile を含む画面で、表示ユーザの Profile Home の URL を返す。wp_head
フックから呼んでも、今表示されてる User Profile の URL を返してくれるっぽい。
$bp->displayed_user->fullname
Member Profile を含む画面で、表示ユーザのフルネームを返す。wp_head
フックから呼んでも、今表示されてる User Profile のフルネームを返してくれるっぽい。
bp_core_get_userlink()
Member Profile を含む画面で、表示ユーザの Profile Home へのリンクを返す。ユーザ名とaタグを含むHTMLリンクを作ってくれる。wp_head
フック内から使えるかどうかは未確認。
xprofile_get_field_data(フィールド名, ユーザID)
指定したユーザの Extended Profile を返す関数。フィールド名は文字列。ユーザIDは上述の $bp->displayed_user->id
とかで引っ張ってくる。wp_head
フック内でも使えた。
bp_core_fetch_avatar()
ユーザやグループの avatar を引っ張ってくる。引数がやたらたくさんあって、全貌を把握できていない。とりあえず自分の用途に使う分には以下のとおり。
html
引数は、true を指定すると img タグを作り、false だと画像のURIのみ返す。img タグを作るときは class
とかも指定可能。
no_grav
は、false を指定すると Gravatar を使うっぽい感じなので、とりあえず true を指定してる。
type
は、full か thumb を指定可能。avatar の大きさっぽい。
Member Profile を含む画面から呼び出す場合、上記二つ以外をデフォルトのまま呼べば、表示ユーザの avatar を返してくれる。これは wp_head
フックの中でも確認。
グループの avatar を呼び出す場合、あんまり自信が無いのだけど、'item_id' => グループID, 'object'=>'group', 'avatar_dir'=>'group-avatars'
で呼べばとりあえずそれっぽいのが返ってくる。
$bp->groups->current_group
Group Profile を含む画面で表示グループの情報を返す。current_group はグループっぽいクラスだと思うのだけどよくわかっていない。wp_head
フックからでも使える。確認できたプロパティは
- $bp->groups->current_group->id
- グループID
- $bp->groups->current_group->name
- $bp->groups->current_group->description
- グループ説明文
グループ名
グループの Home の URL を返すプロパティもあると思うのだけどよくわからなかったので、上述の bp_get_group_permalink()
で取ってきた。
bp_activity_add()
Activity Stream にアクティビティを追加する関数。引数がやたら多く、あまりよく使い方がわかってない。とりあえずの使い方は enemy plugin の記事 を参照してみて。
bp_core_current_time()
現在時刻を返す関数。bp_activity_add()
呼ぶときに引数として現在時刻を与えることになるのでこれを使った。
フック
bp_before_member_header_meta
Member Profile 画面に表示項目を追加したいときに使うフック。Cubepoint Integration plugin がここをフックしてるので真似してみた。
bp_before_group_header_meta
Group Profile 画面に表示項目を追加したいときに使うフック。bp_before_member_header_meta
と似たような名前のフックがあるだろうと予想して grep かけたらヒットしたのでそのまま使ってる。
bp_member_header_actions
Member Profile 画面に Action Button を追加するときに使うフック。位置的には bp_before_member_header_meta
より後ろになる。BuddyPress Followers plugin が「フォローする」ボタンを設置するために使ってる。
bp_get_the_profile_field_value
ユーザの Extended Profile の各項目を表示する際に呼ばれるフィルタ。Custom Profile Filters for BuddyPress plugin がこれを使ってる。このフックでフィルタを挟むと Extended Profile の特定特定項目で markdown 記法を使うとかそういうことも多分できる。