vendredi 25 septembre 2026

À propos

Contact

Accessibilité

Ajouter des annonces aria-live sur un panier WooCommerce mis à jour en Ajax

Un panier qui se met à jour sans recharger la page reste muet pour un lecteur d'écran. Tutoriel pour ajouter des annonces claires, sans surcharger l'expérience.

Par Clément Hadrot • 14 janvier 2025 • 4 min de lecture • Aucun commentaire
Ajouter des annonces aria-live sur un panier WooCommerce mis à jour en Ajax

Sur WooCommerce, ajouter un produit au panier ou modifier une quantité déclenche une requête Ajax qui met à jour le mini-panier et le total, sans recharger la page. Pour une personne voyante, le changement de nombre et de montant est immédiatement visible. Pour une personne utilisant un lecteur d’écran, rien ne signale que quoi que ce soit vient de se passer, sauf à naviguer manuellement jusqu’au panier pour vérifier. Ce tutoriel montre comment ajouter des annonces aria-live précises sur ces mises à jour, sans revenir sur l’audit global du tunnel d’achat, déjà traité par ailleurs.

Étape 1 : créer une région aria-live permanente

Une erreur fréquente consiste à créer dynamiquement, en JavaScript, l’élément qui portera aria-live au moment même où l’on souhaite faire une annonce. Cela ne fonctionne pas de façon fiable : la plupart des lecteurs d’écran n’annoncent correctement le contenu d’une région live que si celle-ci existait déjà dans le DOM avant la mise à jour. La région doit donc être présente dès le chargement de la page, vide au départ :

<div
  id="woocommerce-annonce-panier"
  class="screen-reader-text"
  aria-live="polite"
  aria-atomic="true"></div>

Cette région peut être injectée via le hook wp_footer, pour qu’elle soit présente sur toutes les pages où une action panier est possible, y compris la fiche produit et la page panier elle-même.

Étape 2 : s’accrocher aux événements Ajax déjà déclenchés par WooCommerce

WooCommerce déclenche déjà plusieurs événements JavaScript personnalisés lors des mises à jour de panier, notamment added_to_cart et updated_cart_totals. Plutôt que de réinventer la détection des changements, le script s’y accroche directement :

L'essentiel à retenir : Une région aria-live dédiée doit exister en permanence dans le DOM, pas être créée à la volée ; Le texte annoncé doit rester bref et informatif, pas une simple répétition du visuel ; Un throttle évite les annonces en rafale lors de modifications rapides de quantité
jQuery(document.body).on('added_to_cart', function(event, fragments, cartHash, button) {
  const nomProduit = button.data('product_name') || 'Le produit';
  annoncerAuPanier(`${nomProduit} ajouté au panier.`);
});

jQuery(document.body).on('updated_cart_totals', function() {
  const total = document.querySelector('.woocommerce-Price-amount')?.textContent;
  annoncerAuPanier(`Panier mis à jour${total ? ', nouveau total ' + total : ''}.`);
});

Étape 3 : temporiser les annonces pour éviter le bruit

Modifier une quantité avec les flèches d’un champ numérique déclenche souvent plusieurs événements updated_cart_totals rapprochés, un par incrément. Annoncer chacun d’entre eux produirait un flot d’annonces contradictoires pour un lecteur d’écran, se coupant les unes les autres. Une temporisation de 300 millisecondes, avant d’annoncer seulement la dernière valeur stabilisée, résout ce problème :

let minuteurAnnonce;

function annoncerAuPanier(texte) {
  clearTimeout(minuteurAnnonce);
  minuteurAnnonce = setTimeout(() => {
    const region = document.getElementById('woocommerce-annonce-panier');
    region.textContent = '';
    // Un léger décalage force certains lecteurs d'écran à bien
    // détecter le changement de contenu, même identique au précédent.
    requestAnimationFrame(() => { region.textContent = texte; });
  }, 300);
}

Étape 4 : garder un texte bref, pas une redite complète du visuel

Le texte annoncé ne doit pas chercher à décrire exhaustivement l’état du panier (liste de tous les articles, sous-total, taxes, frais de port) : cela deviendrait long à écouter et redondant à chaque petite modification. Un message court et ciblé sur ce qui vient de changer suffit :

  • « Casque vélo urbain ajouté au panier. »
  • « Quantité mise à jour : 3 articles, nouveau total 87,00 €. »
  • « Article retiré du panier. »

Étape 5 : tester avec NVDA en situation réelle d’achat

Le test final consiste à parcourir un scénario d’achat complet avec NVDA activé : ajouter un produit depuis la fiche produit, modifier la quantité depuis la page panier, retirer un article, en vérifiant à chaque étape qu’une annonce claire et unique se déclenche, sans doublon ni silence.

Sur ce type de correctif, le réglage le plus délicat n’est pas la mécanique aria-live elle-même, mais le dosage du texte annoncé : trop bref, l’information manque de contexte ; trop détaillé, l’annonce devient fatigante à l’usage sur un site où l’on modifie son panier plusieurs fois par visite.

En résumé

Un panier WooCommerce mis à jour en Ajax devient utilisable pour une personne non-voyante avec une région aria-live permanente, branchée sur les événements déjà émis par WooCommerce, temporisée pour éviter les annonces en rafale, et formulée de façon brève et ciblée. Cette correction ne nécessite aucune modification du comportement visuel existant : elle ajoute uniquement ce qui manquait pour les personnes qui n’utilisent pas d’écran.

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