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を生成します。

お気軽にご相談ください

お見積りへ お問い合わせへ