# get_avatar : remplacer Gravatar par une image locale pour tous les utilisateurs

> Servir un avatar par défaut hébergé sur le site plutôt que de dépendre d'un service externe, sans installer la moindre extension.

- Auteur : Clément Hadrot
- Publié le : 2021-05-21
- Mis à jour le : 2021-05-21
- Catégorie : Tips
- URL : https://wpmoderne.dev.wordpress-developpement.fr/tips/get-avatar-remplacer-gravatar-image-locale/

## L’essentiel

- get_avatar_url et pre_get_avatar_data interceptent la génération
- Une image locale évite une dépendance à un service externe
- Fonctionne pour les auteurs comme pour les commentateurs

Un client du secteur médical, particulièrement pointilleux sur la protection des données, a posé une question qu'on ne lui avait encore jamais posée aussi frontalement : « Pourquoi ma page d'équipe envoie-t-elle discrètement l'adresse e-mail hachée de mes praticiens à un service américain juste pour afficher une photo de profil ? » Question légitime : c'est exactement ce que fait Gravatar par défaut, dès qu'aucune photo de profil n'a été définie autrement.

Sans configurer d'avatar personnalisé pour chaque utilisateur, WordPress interroge systématiquement Gravatar en arrière-plan à chaque affichage. Pour un site qui préfère s'affranchir totalement de cette dépendance, ou simplement afficher un avatar de marque cohérent, la fonction `get_avatar()` et ses filtres associés permettent de tout remplacer proprement.

## Le filtre le plus direct : pre_get_avatar_data

Introduit en WordPress 4.2, le filtre `pre_get_avatar_data` intercepte la génération avant même qu'une requête vers Gravatar ne soit envisagée. C'est la méthode la plus propre, car elle évite toute tentative de contact avec le service externe :

```
function cm_avatar_local( $args, $id_or_email ) {
    $args['url'] = get_stylesheet_directory_uri() . '/assets/images/avatar-defaut.png';
    return $args;
}
add_filter( 'pre_get_avatar_data', 'cm_avatar_local' );
```

Ce filtre s'applique aussi bien aux auteurs d'articles qu'aux commentateurs, puisque `get_avatar()` est la fonction commune utilisée dans les deux contextes.

> L'essentiel à retenir : get_avatar_url et pre_get_avatar_data interceptent la génération ; Une image locale évite une dépendance à un service externe ; Fonctionne pour les auteurs comme pour les commentateurs

## Proposer un avatar différent selon le rôle

Pour un site où il est utile de distinguer visuellement un praticien d'un membre du secrétariat, le second paramètre `$id_or_email` permet d'aller chercher des informations sur l'utilisateur avant de choisir l'image :

```
function cm_avatar_selon_role( $args, $id_or_email ) {
    $user = false;

    if ( is_numeric( $id_or_email ) ) {
        $user = get_user_by( 'id', $id_or_email );
    } elseif ( is_object( $id_or_email ) && ! empty( $id_or_email->user_id ) ) {
        $user = get_user_by( 'id', $id_or_email->user_id );
    }

    if ( $user && in_array( 'praticien', (array) $user->roles, true ) ) {
        $args['url'] = get_stylesheet_directory_uri() . '/assets/images/avatar-praticien.png';
    } else {
        $args['url'] = get_stylesheet_directory_uri() . '/assets/images/avatar-defaut.png';
    }

    return $args;
}
add_filter( 'pre_get_avatar_data', 'cm_avatar_selon_role' );
```

Cette distinction reste purement visuelle et ne remplace évidemment pas une vraie gestion des photos de profil individuelles, mais elle donne une identité minimale sans exposer la moindre donnée personnelle vers l'extérieur.

## Ne pas oublier les commentateurs anonymes

Sur un blog où les commentaires restent ouverts, un visiteur non connecté peut laisser un commentaire avec une simple adresse e-mail, sans jamais créer de compte. Dans ce cas, `$id_or_email` n'est ni un identifiant utilisateur ni un objet `WP_User`, mais directement une chaîne ou un objet commentaire. Le filtre ci-dessus, en assignant systématiquement une image par défaut en l'absence de correspondance, couvre déjà ce cas sans traitement supplémentaire.

## Vérifier qu'aucun appel à Gravatar ne subsiste

- Inspecter les requêtes réseau de la page dans les outils de développement du navigateur : aucune requête vers `secure.gravatar.com` ne devrait apparaître après la mise en place du filtre.
- Vérifier également les réglages « Discussion » de l'administration, où une case « Afficher les avatars » reste indépendante de ce filtre et doit rester cochée pour que `get_avatar()` soit appelée.
- Contrôler les thèmes enfants ou extensions qui appelleraient directement l'URL Gravatar sans passer par `get_avatar()`, ce qui contournerait le filtre.

> Sur un site sensible aux questions de conformité, ce filtre de trois lignes évite un point de fuite de données souvent oublié dans les audits, précisément parce qu'il ne saute pas aux yeux dans le code du thème.

## En résumé

`pre_get_avatar_data` permet de remplacer intégralement Gravatar par une ressource locale, sans extension ni configuration lourde, tout en couvrant à la fois les auteurs et les commentateurs. Ce filtre agit uniquement sur l'affichage de l'avatar et n'a aucun rapport avec la gestion des autres champs du profil utilisateur, qui suit une logique distincte.
