Le WordPress d'aujourd'hui, décodé pour les développeurs

Astuces

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.

Par WordPress Développement • 22 juin 2024 • 4 min de lecture • Aucun commentaire
get_avatar_data pour personnaliser un avatar sans réécrire toute la fonction

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

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

Voir tous ses articles

Dans la même veine

À lire aussi