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.

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.comne 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.