# Personnaliser le message affiché quand un commentaire part en modération

> Le message générique « Votre commentaire est en attente de modération » ne convient pas à tous les sites. Voici comment l'adapter sans toucher au thème.

- Auteur : Clément Hadrot
- Publié le : 2023-10-25
- Mis à jour le : 2023-10-25
- Catégorie : Tips
- URL : https://wpmoderne.dev.wordpress-developpement.fr/tips/personnaliser-message-commentaire-attente-automatique/

## L’essentiel

- Un filtre gettext plutôt qu'un fichier de thème modifié
- Message adapté à l'auteur ou au contexte
- Aucun risque de perte au prochain changement de thème

Un client d'un site associatif m'a écrit un jour, un peu inquiet : « Mon commentaire a disparu, il y a un bug ? » Non, il n'y avait pas de bug : son commentaire attendait simplement une validation, comme prévu. Le message qui s'affichait à la place — « Votre commentaire est en attente de modération. » — était tellement neutre qu'il ne rassurait personne.

C'est un problème que je retrouve régulièrement sur des sites où la modération manuelle est activée à dessein (forums de discussion, sites de collectivités, plateformes communautaires). Le message par défaut de WordPress fait le travail, mais il ne dit rien sur le délai, ni sur la raison. Le bon réflexe n'est pas de modifier le fichier `comments.php` du thème à la main : ce fichier sera écrasé à la prochaine mise à jour du thème, et le message restera générique pour tous les visiteurs, quel que soit leur profil.

## Où vit vraiment ce message

La chaîne « Votre commentaire est en attente de modération. » n'est pas codée en dur dans un thème : elle provient du cœur de WordPress, chargée par la fonction `__()` avec le domaine de traduction `default`. Les thèmes standards (Twenty Twenty et suivants) l'affichent via la fonction `wp_list_comments()` et son callback interne, qui teste la propriété `comment_approved` du commentaire.

Comme il s'agit d'une chaîne traduisible, on peut l'intercepter avec le filtre `gettext`, sans dépendre du thème utilisé. C'est la bonne porte d'entrée : elle fonctionne quel que soit le thème actif, et elle survit à un changement de thème futur.

## Le filtre à mettre en place

> L'essentiel à retenir : Un filtre gettext plutôt qu'un fichier de thème modifié ; Message adapté à l'auteur ou au contexte ; Aucun risque de perte au prochain changement de thème

Voici la version la plus simple, qui remplace le texte pour tout le monde :

```
add_filter( 'gettext', function ( $translation, $text, $domain ) {
    if ( 'default' === $domain && 'Your comment is awaiting moderation.' === $text ) {
        return 'Merci ! Votre message sera visible dès sa validation par un modérateur, généralement sous 24 heures.';
    }
    return $translation;
}, 10, 3 );
```

Le point délicat, c'est que le texte source à comparer reste toujours en anglais, même sur un site francophone : `gettext` agit avant traduction, sur la chaîne originale du code. Si votre comparaison échoue silencieusement, vérifiez d'abord la version exacte de la chaîne dans le cœur (elle a changé de formulation entre WordPress 5.4 et les versions plus récentes, passant de « awaiting moderation » à des variantes proches selon le contexte d'affichage).

## Adapter le message selon l'auteur ou le contexte

Le vrai intérêt, c'est de personnaliser le message selon qui commente. Sur un site où les clients identifiés ont un traitement prioritaire, on peut distinguer un commentateur connecté d'un visiteur anonyme :

```
add_filter( 'gettext', function ( $translation, $text, $domain ) {
    if ( 'default' !== $domain || 'Your comment is awaiting moderation.' !== $text ) {
        return $translation;
    }

    if ( is_user_logged_in() ) {
        return 'Votre commentaire est enregistré. En tant que membre, il sera publié sous peu.';
    }

    return 'Votre commentaire est en file d\'attente : un modérateur le valide généralement avant la fin de journée.';
}, 10, 3 );
```

On peut aller plus loin en distinguant le type de contenu commenté : un message plus formel sur une page d'annonce officielle, plus décontracté sur un billet de blog. Il suffit de récupérer le commentaire en cours de traitement via la variable globale `$comment` ou, plus proprement, via un hook antérieur qui stocke temporairement l'ID du post concerné.

### Attention à un piège classique

Le filtre `gettext` s'exécute pour **toutes** les chaînes traduites de l'admin et du site, des centaines de fois par page. Une comparaison de chaîne mal ciblée (sans vérifier le domaine `default`, ou avec une chaîne trop courte) peut remplacer un mot ailleurs sur le site sans que vous vous en rendiez compte. Testez toujours avec les deux conditions réunies : domaine et texte exact.

- Vérifiez le domaine de traduction avant le texte, pas l'inverse : c'est moins coûteux en calcul sur des milliers d'appels.
- Ne réutilisez jamais ce filtre pour du contenu dynamique lourd (requêtes SQL, appels API) : il tourne trop souvent.
- Testez le rendu avec un compte utilisateur non connecté ET connecté, dans un navigateur privé.

## Et si vous gérez plusieurs langues ?

Sur un site multilingue, le filtre `gettext` seul ne suffit plus : il faut également couvrir `gettext_with_context` si votre thème utilise `_x()` pour cette chaîne, ce qui est rare mais arrive avec certains thèmes premium. Le réflexe simple : chercher la chaîne source dans le thème actif avant d'écrire le filtre, avec un grep rapide sur le dossier du thème.

> Sur les projets récents, je place systématiquement ce type de filtre dans un fichier dédié `inc/messages-commentaires.php`, chargé depuis `functions.php`. Cela évite de le perdre au milieu d'un fichier de snippets fourre-tout, et ça facilite la relecture six mois plus tard.

## Notre verdict

Ce genre de personnalisation prend cinq minutes et change réellement la perception d'un visiteur qui vient de laisser un commentaire. Un message clair, qui explique le délai et la raison de l'attente, réduit mécaniquement les messages « pourquoi mon commentaire a disparu » envoyés au support. C'est un ajustement discret, mais qui compte dans l'expérience globale d'un site qui accepte les échanges avec son public.

Gardez cependant le filtre simple : pas de logique métier lourde dans un hook `gettext`, et toujours une valeur de repli qui retourne la traduction d'origine si aucune condition ne correspond. C'est ce qui garantit que le reste du site continue de s'afficher normalement.
