アバターを自分の好みの画像に変更したい
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では、様々なフィルターフックやアクションフックが用意されているため、フックする箇所に目星をつけることができれば、コアファイルを触ること無く簡単に結果を制御できます。
ぜひご活用ください。

