vendredi 25 septembre 2026

À propos

Contact

Tips

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.

Par Clément Hadrot • 21 mai 2021 • 4 min de lecture • Aucun commentaire
get_avatar : remplacer Gravatar par une image locale pour tous les utilisateurs

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.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi