アバターを自分の好みの画像に変更したい
WordPressは、Gravatorというシステムと連動してアバターを表示しています。
Gravatar
https://ja.gravatar.com/
アバターを変更する場合は、このGravatorに自分のメールアドレスを登録する必要があるのですが、結構面倒だと言われることが有ります。
今回、そんな時のために、ユーザカスタムフィールドに画像を登録してもらい、それをアバターとして表示するようにカスタマイズします。
アバターを取得している場所
アバターを取得している処理は、wp-includes/link-template.php のget_avatar_data関数っぽいです。
get_avatar_data関数の以下のフィルターフックの値をフィルタ(add_filter)します。
1 2 3 4 5 6 7 8 9 | /** * Filter the avatar data. * * @since 4.2.0 * * @param array $args Arguments passed to get_avatar_data(), after processing. * @param int|object|string $id_or_email A user ID, email address, or comment object. */ return apply_filters( 'get_avatar_data', $args, $id_or_email ); |
ちなみにこのフィルタの第一引数の$argsは以下のように設定されています。
$args[“url”]を書き換えてあげればアバターで使用する画像が変わります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | var_dump($args); /* array(14) { ["size"]=> int(160) ["height"]=> int(80) ["width"]=> int(80) ["default"]=> string(2) "mm" ["force_default"]=> bool(false) ["rating"]=> string(1) "g" ["scheme"]=> NULL ["processed_args"]=> NULL ["extra_attr"]=> string(0) "" ["alt"]=> string(0) "" ["class"]=> NULL ["force_display"]=> bool(false) ["found_avatar"]=> bool(true) ["url"]=> string(76) "http://0.gravatar.com/avatar/ca0440a1432580931ef1bdc554f38e2f?s=160&d=mm&r=g" } */ |
functions.php に処理を追加しましょう
さあ、フィルタを使って書き換えて見ましょう。
ちなみに今回はACF(Advanced Custom Fields Plugin)を使っていますので、流用される場合は、適宜修正してくださいね。
お使いのテーマのfunctions.phpに以下を書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /** * 登録ユーザの写真があれば使用する */ add_filter( 'get_avatar_data', 'onocom_get_avatar_data', 10, 2 ); // 2はフィルタで渡される引数の数を示します。重要なので忘れぬように! function onocom_get_avatar_data( $args, $id_or_email ) { if( is_object($id_or_email) && isset( $id_or_email->user_id ) && $id_or_email->user_id !== "0" ) { $id = $id_or_email->user_id; $profile_image_id = get_field( "profile_image", "user_" . $id ); if( $profile_image_id ) { $src = wp_get_attachment_image_src($profile_image_id, "thumbnail", false); if ($src) { $args["url"] = $src[0]; } } } return $args; } |
これをすることで、該当するユーザがコメントの書き込みを行った場合、以下のような$args[“url”]に書き換わり、アバターの画像を変えることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | var_dump($args); /* array(14) { ["size"]=> int(160) ["height"]=> int(80) ["width"]=> int(80) ["default"]=> string(2) "mm" ["force_default"]=> bool(false) ["rating"]=> string(1) "g" ["scheme"]=> NULL ["processed_args"]=> NULL ["extra_attr"]=> string(0) "" ["alt"]=> string(0) "" ["class"]=> NULL ["force_display"]=> bool(false) ["found_avatar"]=> bool(true) ["url"]=> string(87) "http://example.com/wp-content/uploads/2016/02/profile-img-300x300.jpg" }*/ |
まとめ
WordPressでは、様々なフィルターフックやアクションフックが用意されているため、フックする箇所に目星をつけることができれば、コアファイルを触ること無く簡単に結果を制御できます。
ぜひご活用ください。