# get_avatar_data pour personnaliser un avatar sans réécrire toute la fonction

> Modifier finement l'affichage d'un avatar ne demande pas de recopier get_avatar entière. Intervenir sur les données en amont suffit largement.

- Auteur : WordPress Développement
- Publié le : 2024-06-22
- Mis à jour le : 2024-06-22
- Catégorie : Astuces
- URL : https://www.wpmoderne.fr/tips/get-avatar-data-personnaliser-avatar/

## L’essentiel

- get_avatar_data() renvoie les données de l'avatar avant leur mise en forme HTML
- Le filtre get_avatar_data permet d'ajuster taille, URL ou classe sans dupliquer la fonction
- get_avatar() applique ensuite ces données au balisage final

Faut-il vraiment recopier l'intégralité de `get_avatar()` dans un thème enfant pour changer une simple taille d'image ou ajouter une classe CSS sur la balise générée ? La tentation est fréquente, mais WordPress propose une voie bien plus ciblée pour ce genre d'ajustement : intervenir sur les données de l'avatar avant qu'elles ne soient converties en balisage HTML.

`get_avatar_data()` est la fonction qui prépare, en amont de `get_avatar()`, l'ensemble des informations nécessaires à l'affichage d'un avatar : URL de l'image, taille demandée, texte alternatif, classes CSS. `get_avatar()` se contente ensuite d'assembler ces données dans une balise `<img>`.

## La séparation entre données et balisage

Cette séparation en deux étapes distinctes n'a rien d'anodin : elle permet d'intervenir sur le contenu de l'avatar (quelle image afficher, à quelle taille) sans avoir à toucher à sa structure HTML finale, et inversement. Beaucoup de développeurs ignorent cette distinction et finissent par surcharger entièrement `get_avatar()`, avec le risque de perdre au passage des cas particuliers déjà gérés par le cœur.

```
$donnees = get_avatar_data( $user_id, array( 'size' => 96 ) );

print_r( $donnees );
// array(
//     [url] => https://secure.gravatar.com/avatar/...
//     [found_avatar] => true
//     [width] => 96
//     [height] => 96
//     ...
// )
```

## Le filtre get_avatar_data

> L'essentiel à retenir : get_avatar_data() renvoie les données de l'avatar avant leur mise en forme HTML ; Le filtre get_avatar_data permet d'ajuster taille, URL ou classe sans dupliquer la fonction ; get_avatar() applique ensuite ces données au balisage final

Le filtre `get_avatar_data` reçoit ce tableau de données juste avant qu'il ne soit transmis à la génération du balisage. C'est l'endroit idéal pour ajuster finement l'affichage sans dupliquer la logique de rendu :

```
add_filter( 'get_avatar_data', function ( $args, $id_ou_email ) {
    $utilisateur = false;

    if ( is_numeric( $id_ou_email ) ) {
        $utilisateur = get_user_by( 'id', $id_ou_email );
    } elseif ( is_object( $id_ou_email ) && isset( $id_ou_email->user_id ) ) {
        $utilisateur = get_user_by( 'id', $id_ou_email->user_id );
    }

    if ( $utilisateur && in_array( 'redacteur', $utilisateur->roles, true ) ) {
        $args['class'][] = 'avatar-redacteur';
    }

    return $args;
}, 10, 2 );
```

Ce filtre reçoit également un second argument, `$id_ou_email`, qui peut représenter selon le contexte un identifiant d'utilisateur, une adresse email, ou un objet commentaire, ce qui explique la vérification de type effectuée avant d'accéder aux propriétés attendues.

## Un usage concret : remplacer l'avatar pour un rôle précis

Sur un site éditorial qui distingue rédacteurs et relecteurs, on peut souhaiter afficher un avatar générique différent selon le rôle, sans dépendre de l'image effectivement associée au compte Gravatar de chaque utilisateur :

```
add_filter( 'get_avatar_data', function ( $args, $id_ou_email ) {
    $utilisateur = get_user_by( 'id', is_numeric( $id_ou_email ) ? $id_ou_email : 0 );

    if ( $utilisateur && in_array( 'relecteur', $utilisateur->roles, true ) ) {
        $args['url'] = get_template_directory_uri() . '/images/avatar-relecteur.png';
    }

    return $args;
}, 10, 2 );
```

Cette approche évite de recourir à un plugin dédié pour un besoin aussi ciblé, tout en restant compatible avec tous les endroits du site où `get_avatar()` est appelée, puisque le filtre agit en amont, quel que soit l'endroit d'affichage final.

## Champs disponibles dans le tableau de données

- `size`, `width`, `height` : dimensions demandées et effectivement appliquées à l'avatar.
- `default` : l'image ou le style utilisé quand aucun avatar personnalisé n'est trouvé (identicon, mystery-person, robohash, entre autres options natives).
- `class` : un tableau de classes CSS ajoutées à la balise générée.
- `extra_attr` : une chaîne d'attributs HTML additionnels insérés directement dans la balise.

Modifier `extra_attr` permet, par exemple, d'ajouter un attribut `loading="lazy"` à tous les avatars d'une page listant de nombreux commentaires, sans surcharger la fonction de rendu elle-même.

## La différence avec le filtre pre_get_avatar

Un autre filtre, `pre_get_avatar`, intervient plus tôt encore et permet de court-circuiter entièrement la génération de l'avatar en renvoyant directement un balisage HTML complet. Il répond à un besoin différent : remplacer totalement le système d'avatar plutôt que d'ajuster finement ses données, une distinction à garder en tête selon l'ampleur réelle du besoin.

> Avant de recopier `get_avatar()` dans un thème enfant, vérifier ce que `get_avatar_data` permet déjà d'ajuster évite de dupliquer une logique qui existe nativement, et reste plus simple à maintenir lors d'une mise à jour du cœur.

## En résumé

Séparer les données de l'avatar de son balisage final est une distinction discrète mais précieuse : elle permet d'ajuster taille, classe ou source d'image sans jamais toucher au HTML généré par le cœur. Le filtre `get_avatar_data` reste le point d'entrée à privilégier pour toute personnalisation qui ne concerne pas la structure même de la balise.
