2026年5月20日
2026年5月20日
WordPressのプロフィール写真をGravatar以外に変更する方法
はじめに
WordPressのプロフィール写真はデフォルトでGravatar(グローバルアバターサービス)を使用します。Gravatarに登録されていない場合はデフォルトアイコンが表示されます。ローカルにアップロードした画像を使う方法を解説します。
解決手順
ステップ1:Simple Local Avatarsプラグインを使用する(最簡単)
wp plugin install simple-local-avatars --activate
有効化後、各ユーザーのプロフィール編集画面に「ローカルアバター」セクションが追加されます。管理画面 → ユーザー → プロフィールを編集 → ローカルアバターをアップロード。
ステップ2:get_avatarフィルタでアバターをカスタマイズする
// functions.php — 全ユーザーのデフォルトアバターをカスタム画像に変更
add_filter('get_avatar', function($avatar, $id_or_email, $size, $default, $alt) {
// ユーザーIDを取得
$user = null;
if (is_numeric($id_or_email)) {
$user = get_user_by('id', $id_or_email);
} elseif (is_string($id_or_email)) {
$user = get_user_by('email', $id_or_email);
} elseif ($id_or_email instanceof WP_User) {
$user = $id_or_email;
}
if (!$user) {
return $avatar;
}
// ユーザーメタからカスタムアバターIDを取得
$avatar_id = get_user_meta($user->ID, 'custom_avatar_id', true);
if (!$avatar_id) {
return $avatar;
}
$img_src = wp_get_attachment_image_src($avatar_id, [$size, $size]);
if (!$img_src) {
return $avatar;
}
return sprintf(
'<img src="%s" width="%d" height="%d" alt="%s" class="avatar avatar-%d photo">',
esc_url($img_src[0]),
$size, $size,
esc_attr($alt),
$size
);
}, 10, 5);
ステップ3:プロフィール画面にアバターアップロードフォームを追加する
// functions.php — プロフィール編集画面にアバターアップロードフィールドを追加
add_action('show_user_profile', 'add_avatar_upload_field');
add_action('edit_user_profile', 'add_avatar_upload_field');
function add_avatar_upload_field(WP_User $user) {
$avatar_id = get_user_meta($user->ID, 'custom_avatar_id', true);
$avatar_url = $avatar_id ? wp_get_attachment_image_url($avatar_id, 'thumbnail') : '';
?>
<h2>プロフィール写真</h2>
<table class="form-table">
<tr>
<th>アバター画像</th>
<td>
<?php if ($avatar_url): ?>
<img src="<?php echo esc_url($avatar_url); ?>" width="96" height="96"><br>
<?php endif; ?>
<input type="number" name="custom_avatar_id" value="<?php echo esc_attr($avatar_id); ?>"
placeholder="メディアID">
<p class="description">メディアライブラリの画像IDを入力してください。</p>
</td>
</tr>
</table>
<?php
}
// プロフィール保存時にアバターIDを保存
add_action('personal_options_update', 'save_avatar_field');
add_action('edit_user_profile_update', 'save_avatar_field');
function save_avatar_field(int $user_id) {
if (!current_user_can('edit_user', $user_id)) {
return;
}
$avatar_id = absint($_POST['custom_avatar_id'] ?? 0);
update_user_meta($user_id, 'custom_avatar_id', $avatar_id);
}
ステップ4:Gravatarの読み込みを完全に無効化する
// functions.php — GravatarのURL生成を無効化してデフォルト画像を使用
add_filter('get_avatar_url', function($url, $id_or_email, $args) {
return get_stylesheet_directory_uri() . '/images/default-avatar.png';
}, 10, 3);
注意事項
get_avatarフィルタの第5引数($alt)から第6引数($args)を受け取る場合はadd_filterの第4引数を適切に設定してください- Gravatarへのリクエストを完全に止めるには
get_avatar_urlフィルタでURLを上書きします。プライバシー保護やパフォーマンス改善に効果的です - Simple Local Avatarsプラグインは軽量でシンプルなため、コード実装より先に試すことをお勧めします
まとめ
プロフィール写真の変更には Simple Local Avatars プラグインが最も手軽です。コードで実装する場合は get_avatar フィルタでカスタムHTML を返すか、ユーザーメタにメディアIDを保存してアバターURLを生成します。