プロフィール画像を自前で設定できるようにするWordPressカスタマイズ方法

通常、Wordpressでプロフィール画像を設定しようと思ったら、Gravatarで設定するのが一般的かと思います。

以下は、プロフィール管理画面の設定項目。

Gravatarでプロフィール画像を設定する場合

ただこれだと、Gravatarに登録を行ってから、プロフィール画像を設定する必要があるので少々手間がかかります。

そのWordPressサイトでしかプロフィール画像を使わない場合、Wordpress側の機能だけで、プロフィール画像を設定できた方が、楽は楽だと思います。

なので、Wordpressカスタマイズをすることにより、「Wordpress側の設定だけでプロフィール画像を設定」できるようにコードを書いたので紹介です。

Gravatarは様々なサービスで共通画像利用できる利点はあります。
スポンサーリンク
レクタングル(大)広告

プロフィール画像設定用のカスタマイズ

今回のカスタマイズは、テーマ、プラグインどちらでも使える方法だと思います。けれど以下では、テーマをカスタマイズするということを前提で説明します。

独自プロフィール画像設定機能をプロフィール管理画面につけるには、以下のコードをテーマのfunctions.php等にコピペします。

///////////////////////////////////////
// 自前でプロフィール画像の設定
///////////////////////////////////////
//プロフィール画面で設定したプロフィール画像
if ( !function_exists( 'get_the_author_upladed_avatar_url_demo' ) ):
function get_the_author_upladed_avatar_url_demo($user_id){
  if (!$user_id) {
    $user_id = get_the_posts_author_id();
  }
  return esc_html(get_the_author_meta('upladed_avatar', $user_id));
}
endif;

//ユーザー情報追加
add_action('show_user_profile', 'add_avatar_to_user_profile_demo');
add_action('edit_user_profile', 'add_avatar_to_user_profile_demo');
if ( !function_exists( 'add_avatar_to_user_profile_demo' ) ):
function add_avatar_to_user_profile_demo($user) {
?>
  <h3>プロフィール画像</h3>
  <table class="form-table">
    <tr>
      <th>
        <label for="avatar">プロフィール画像URL</label>
      </th>
      <td>
      	<input type="text" name="upladed_avatar" size="70" value="<?php echo get_the_author_upladed_avatar_url_demo($user->ID); ?>" placeholder="画像URLを入力してください">
       <p class="description">Gravatarよりこちらのプロフィール画像が優先されます。240×240pxの正方形の画像がお勧めです。</p>
      </td>
    </tr>
  </table>
<?php
}
endif;

//入力した値を保存する
add_action('personal_options_update', 'update_avatar_to_user_profile_demo');
if ( !function_exists( 'update_avatar_to_user_profile_demo' ) ):
function update_avatar_to_user_profile_demo($user_id) {
  if ( current_user_can('edit_user',$user_id) ){
    update_user_meta($user_id, 'upladed_avatar', $_POST['upladed_avatar']);
  }
}
endif;

//プロフィール画像を変更する
add_filter( 'get_avatar' , 'get_uploaded_user_profile_avatar_demo' , 1 , 5 );
if ( !function_exists( 'get_uploaded_user_profile_avatar_demo' ) ):

function get_uploaded_user_profile_avatar_demo( $avatar, $id_or_email, $size, $default, $alt ) {
  if ( is_numeric( $id_or_email ) )
    $user_id = (int) $id_or_email;
  elseif ( is_string( $id_or_email ) && ( $user = get_user_by( 'email', $id_or_email ) ) )
    $user_id = $user->ID;
  elseif ( is_object( $id_or_email ) && ! empty( $id_or_email->user_id ) )
    $user_id = (int) $id_or_email->user_id;

  if ( empty( $user_id ) )
    return $avatar;

  if (get_the_author_upladed_avatar_url_demo($user_id)) {
    $alt = !empty($alt) ? $alt : get_the_author_meta( 'display_name', $user_id );;
    $author_class = is_author( $user_id ) ? ' current-author' : '' ;
    $avatar = "<img alt='" . esc_attr( $alt ) . "' src='" . esc_url( get_the_author_upladed_avatar_url_demo($user_id) ) . "' class='avatar avatar-{$size}{$author_class} photo' height='{$size}' width='{$size}' />";
  }

  return $avatar;
}
endif;

コードの内容さえ気にしなければ、コピペだけでカスタマイズすることが出来るようにしています。

このカスタマイズを行えば、ユーザーごとにそれぞれプロフイール画像設定できるようになります。

コードが長いため、説明は省きます。
上記のコードは、Wordpress公式テーマのTwenty Sixteenで動作を確認しました。

動作確認

動作を見るにはWordpress管理画面の「ユーザー → あなたのプロフィール」メニューを開きます。

Wordpress管理画面のユーザーからあなたのプロフィールを開く

すると、プロフィール情報の保存ボタン手前あたりに「プロフィール画像URL」という項目が表示されます。

プロフィール設定画面に画像URL設定項目

あとは、メディアライブラリ等に画像をアップロードしてURLを取得してください。

メディアライブラリに画像をアップロード

あとは先程の「プロフィール画像URL」に画像URLを入力して、プロフィールを保存します。

画像URLを入力後、プロフィールの保存をする

これで、Wordpressで使われているアバター画像等が「プロフィール画像URL」で設定したものに入れ替わります(※全てではないかもしれません)。

例えば、コメント欄のアバター画像もデフォルトだと以下のようなものです。

コメント欄のデフォルトアバター画像

これが、画像URLを設定すると以下のように置き換わります。

設定したプロフィール画像が適用されたコメント欄のアバター画像

さらに使いやすくするには

さらに使いやすい機能にするには、画像のアップロード機能を併用したものも良いかと思います。

プロフィール画像のアップロード機能を追加

このような「メディアアップローダー機能を併用したプロフィール画像設定項目」を作成するには、以下のカスタマイズとあわせることで実現できます。

先日、Wordpress開発をしているとき、カスタム設定画面にアップロード機能を実装する必要が出てきました。なのでいろいろと...
アップローダー機能と併用する方法は、少し複雑になるため、コメントで質問いただいてもやり方などはお答え出来ない(簡単には説明出来ない)のでご了承ください。

まとめ

このようにカスタマイズすることで、Wordpressにも、独自のプロフィール画像設定項目を設けることが可能です。

コード量は少々多いかもしれませんが、コピペで出来るので、やろうと思えば数分で出来るかと思います。

スポンサーリンク
レクタングル(大)広告
レクタングル(大)広告

スポンサーリンク