Développeur affichant les derniers commentaires WordPress à l’aide de code PHP sans modifier le cœur du CMS

Afficher les derniers commentaires WordPress sans modifier le cœur — correction 2026

Note de correction — août 2026. En 2013, je proposais de modifier directement wp-includes/default-widgets.php. Ne faites plus cela. Une mise à jour de WordPress écraserait la modification et une erreur PHP pourrait rendre le site inaccessible. WordPress fournit un filtre officiel, widget_comments_args, qui permet d’adapter la requête du widget classique sans toucher au cœur du CMS.

Au fil des années, j’ai administré plusieurs types de sites WordPress : blogs familiaux, sites de communautés de joueurs et, pendant un temps, une plateforme WordPress MU. Une demande revenait régulièrement : afficher dans la colonne latérale les commentaires laissés ailleurs que sous les articles classiques, notamment sur des pages ou des photos.

Le besoin reste compréhensible. Un commentaire récent peut ramener vers une discussion intéressante et montrer que le site vit. Mais le vieux correctif n’est plus défendable. En plus d’être fragile, il supprimait complètement la contrainte post_status => publish, ce qui pouvait élargir la requête à des contenus que l’on ne souhaite pas mettre en avant.

La bonne méthode commence donc par une question simple : quels commentaires manque-t-il réellement ?

La réponse courte

Le widget classique Commentaires récents de WordPress demande aujourd’hui :

  • un nombre limité de commentaires ;
  • des commentaires approuvés ;
  • associés à des contenus ayant le statut publish.

Il ne fixe pas de type de contenu. Un commentaire approuvé sur une page publiée ou sur un type de contenu personnalisé publié peut donc déjà apparaître sans modification.

Le cas particulier historique concerne surtout les médias : une pièce jointe WordPress possède généralement le statut inherit, pas publish. Pour l’inclure, il faut élargir explicitement les statuts et les types autorisés, puis vérifier que sa page est réellement publique.

La solution propre consiste à créer un petit plugin et à utiliser le filtre officiel :

add_filter( 'widget_comments_args', 'blackfury_recent_comments_scope', 10, 2 );

Ne modifiez jamais un fichier situé dans wp-admin ou wp-includes pour ce besoin.

Développeur affichant les derniers commentaires WordPress à l’aide de code PHP sans modifier le cœur du CMS

Ce que fait le widget classique aujourd’hui

La classe WP_Widget_Recent_Comments construit sa requête avec le filtre widget_comments_args. La documentation officielle montre les arguments suivants :

array(
    'number'      => $number,
    'status'      => 'approve',
    'post_status' => 'publish',
)

Ces trois lignes sont importantes.

number

Le widget ne charge qu’un nombre défini de résultats. Un commentaire peut donc être parfaitement éligible sans apparaître s’il est simplement plus ancien que les cinq ou dix commentaires affichés.

status => approve

Les commentaires en attente, indésirables ou placés dans la corbeille ne doivent pas apparaître publiquement. Il faut préserver ce garde-fou dans tout filtre personnalisé.

post_status => publish

Le commentaire doit être rattaché à un contenu publié. Ce réglage évite normalement de faire remonter les discussions liées à des brouillons ou à des contenus privés.

Le widget ne définit pas post_type. La requête n’est donc pas limitée au seul type post. Si un commentaire approuvé sur une page publiée n’apparaît pas, cherchez d’abord une autre cause avant d’ajouter du code.

Widget classique ou bloc « Derniers commentaires » ?

WordPress propose désormais deux outils dont les noms se ressemblent.

OutilOù on le rencontreRéglages courantsFiltre présenté dans ce guide
widget classique Commentaires récentsancien écran Widgets, thèmes classiquestitre et nombre de commentaireswidget_comments_args
bloc Derniers commentaireséditeur de blocs, zone de widgets en blocs, modèle de thèmenombre, avatar, date, extrait et stylespas widget_comments_args

Le bloc core/latest-comments est rendu dynamiquement côté serveur, mais sa mise en œuvre n’est pas celle de l’ancien widget. Le filtre de ce guide cible le widget classique. Ne concluez pas que le code est cassé s’il n’agit pas sur un bloc.

Pour un bloc, commencez par ses propres réglages : nombre de commentaires, avatar, date, extrait, couleurs et typographie. Si vous avez besoin d’une portée personnalisée par type de contenu, mieux vaut développer ou choisir un bloc prévu pour cela plutôt que d’appliquer un filtre global mal ciblé.

Diagnostic avant d’ajouter du code

Prenez un commentaire précis qui devrait apparaître et vérifiez chaque point.

1. Le commentaire est-il approuvé ?

Dans Commentaires, son état doit être approuvé. Une réponse en attente de modération ne doit pas servir de test public.

2. Le contenu parent est-il publié ?

Ouvrez l’article, la page ou le type de contenu concerné. Un brouillon, une publication privée ou un élément dans la corbeille ne doit pas remonter dans un widget public.

3. S’agit-il d’un vrai commentaire ou d’un pingback ?

WordPress distingue les commentaires humains, les pingbacks et les trackbacks. Le widget classique n’impose pas le type comment dans ses arguments de base. Si votre liste est envahie par des notifications de liens, vous pouvez les exclure explicitement.

4. Le commentaire est-il assez récent ?

Augmentez provisoirement le nombre d’éléments affichés. Un widget réglé sur cinq entrées ne montrera pas le sixième commentaire, même si tout le reste est correct.

5. Regardez-vous le bon composant ?

Dans un thème classique, il peut s’agir du widget historique. Dans une zone convertie en blocs, il peut s’agir du bloc Derniers commentaires. Inspectez l’éditeur avant de choisir le filtre.

6. Le cache a-t-il été purgé ?

Un cache de page, un proxy ou un CDN peut continuer à afficher une ancienne colonne latérale. Purgez uniquement le cache concerné après la modification et contrôlez la page dans une fenêtre privée.

7. Le lien du commentaire est-il accessible hors connexion ?

Ouvrez sa destination dans une fenêtre privée. Un commentaire présent dans le widget mais pointant vers une page inaccessible, redirigée ou sans contexte dégrade l’expérience au lieu de l’améliorer.

Solution sûre : un mini-plugin dédié

Une fonction aussi petite mérite tout de même un emplacement stable. Évitez :

  • les fichiers du cœur WordPress ;
  • le thème parent, dont une mise à jour peut écraser le code ;
  • un long fichier functions.php rempli de correctifs sans documentation.

Un mini-plugin permet d’activer, de désactiver et de versionner la modification indépendamment du thème.

Arborescence

Dans wp-content/plugins, créez :

blackfury-recent-comments/
└── blackfury-recent-comments.php

Variante recommandée : articles et pages publiés, sans pingbacks

Placez ce code dans le fichier PHP :

<?php
/**
 * Plugin Name: BlackFury - Commentaires récents
 * Description: Limite le widget classique aux commentaires humains approuvés des articles et pages publiés.
 * Version: 1.0.0
 */

defined( 'ABSPATH' ) || exit;

/**
 * Définit la portée du widget classique Commentaires récents.
 *
 * @param array $args     Arguments transmis à WP_Comment_Query.
 * @param array $instance Réglages de l’instance du widget.
 * @return array
 */
function blackfury_recent_comments_scope( $args, $instance ) {
    $args['status']      = 'approve';
    $args['post_status'] = 'publish';
    $args['post_type']   = array( 'post', 'page' );
    $args['type']        = 'comment';

    return $args;
}

add_filter( 'widget_comments_args', 'blackfury_recent_comments_scope', 10, 2 );

Cette variante est volontairement stricte :

  • elle conserve uniquement les commentaires approuvés ;
  • elle exclut les contenus non publiés ;
  • elle autorise seulement les articles et pages ;
  • elle écarte les pingbacks et trackbacks.

La variable $instance n’est pas utilisée ici, mais le filtre la reçoit depuis WordPress. La déclarer permet d’étendre plus tard le comportement selon une instance précise du widget.

Ajouter un type de contenu personnalisé

Si le site possède un type public nommé dossier, ajoutez-le à la liste :

$args['post_type'] = array( 'post', 'page', 'dossier' );

Utilisez le slug technique du type, pas son nom visible dans le menu. Vérifiez que ses pages individuelles sont publiques et que les commentaires y sont réellement utilisés.

Une liste explicite est souvent plus sûre qu’un post_type => any. Elle évite qu’une extension installée plus tard rende soudainement visibles dans le widget des commentaires liés à un nouveau type de contenu.

Variante pour les commentaires sur les médias

Les pièces jointes WordPress utilisent généralement le type attachment et le statut inherit. Pour les inclure dans l’ancien widget, remplacez la fonction de la variante précédente par celle-ci. Ne conservez pas les deux fonctions sous le même nom dans le plugin :

function blackfury_recent_comments_scope( $args, $instance ) {
    $args['status']      = 'approve';
    $args['post_type']   = array( 'post', 'page', 'attachment' );
    $args['post_status'] = array( 'publish', 'inherit' );
    $args['type']        = 'comment';

    return $args;
}

N’activez pas cette variante sans audit. Le statut inherit est utilisé parce que la pièce jointe hérite du contexte de son parent, mais cela ne garantit pas à lui seul que chaque URL de média constitue une bonne page publique.

Contrôlez au minimum :

  • que les pages de pièces jointes sont encore accessibles avec le thème et la version de WordPress utilisés ;
  • qu’elles ne redirigent pas toutes vers le fichier ou l’article parent ;
  • qu’aucun média lié à un contenu privé ne remonte ;
  • que le lien du commentaire arrive à un endroit compréhensible ;
  • que les anciens commentaires sur photos méritent encore d’être mis en avant.

Si ces conditions ne sont pas remplies, ne cherchez pas à reproduire exactement le comportement de 2013. Mieux vaut rattacher la discussion à un article ou à une galerie actuelle, puis conserver les anciennes photos comme archive.

Pourquoi il ne faut pas simplement supprimer post_status

Le vieux correctif retirait cet argument :

'post_status' => 'publish'

Sans restriction de statut, WP_Comment_Query peut rechercher des commentaires associés à d’autres états de contenu. Même si seuls les commentaires approuvés sont récupérés, l’article ou le média parent n’est pas forcément destiné au public.

Le principe à retenir est celui d’une liste autorisée :

$args['post_type']   = array( 'post', 'page' );
$args['post_status'] = 'publish';

Puis élargissez uniquement ce que vous avez testé. Un résultat absent vaut mieux qu’un lien public vers un contenu qui devait rester discret.

Installer et tester sans casser le site

1. Utiliser une préproduction

La modification doit d’abord être testée sur un clone. Le site BlackFury utilise un thème et des extensions qui ont leur propre histoire ; une vérification locale isolée ne suffit pas à garantir le rendu de la colonne latérale.

2. Sauvegarder

Conservez une sauvegarde des fichiers et de la base avant d’ajouter une extension, même minuscule. Le plugin n’écrit rien dans la base, mais l’activation peut révéler une incompatibilité PHP ou un conflit de fonction.

3. Vérifier la syntaxe PHP

Sur le serveur ou dans le conteneur de test :

php -l wp-content/plugins/blackfury-recent-comments/blackfury-recent-comments.php

La commande doit indiquer qu’aucune erreur de syntaxe n’a été détectée.

4. Téléverser sans activer automatiquement

Placez le plugin dans son dossier, puis activez-le depuis Extensions. Ne remplacez aucun fichier de WordPress.

5. Préparer une matrice de test

CasDoit apparaître avec la variante stricte ?
commentaire approuvé sur article publiéoui
commentaire approuvé sur page publiéeoui
commentaire en attentenon
commentaire indésirablenon
commentaire sur brouillonnon
commentaire sur contenu privénon
pingback ou trackbacknon
commentaire sur pièce jointenon, sauf variante médias validée

Testez avec des commentaires temporaires clairement identifiés sur la préproduction. Vérifiez le résultat hors connexion et sur mobile.

6. Contrôler les journaux

Après activation, consultez les erreurs PHP et le journal WordPress prévu par l’environnement de test. Un écran qui semble fonctionner peut cacher un avertissement répété à chaque chargement.

7. Prévoir le retour arrière

Si le widget disparaît ou si le rendu est incorrect, désactivez le mini-plugin. C’est précisément l’avantage de ne pas avoir touché au cœur du CMS.

Dépannage

Le widget ne change pas

Vérifiez qu’il s’agit du widget classique, pas du bloc Derniers commentaires. Confirmez aussi que le plugin est actif et que la fonction ne porte pas le même nom qu’une fonction déjà déclarée.

Les pages n’apparaissent toujours pas

Contrôlez le statut exact de la page, le statut du commentaire et la limite du widget. Dans le cœur actuel, une page publiée n’est pas exclue par défaut à cause de son type.

Les pingbacks restent visibles

Assurez-vous que le filtre contient :

$args['type'] = 'comment';

Puis videz le cache de page concerné.

Un type personnalisé manque

Ajoutez son slug dans post_type, mais uniquement après avoir vérifié son caractère public. Un nom affiché comme « Dossiers » peut avoir pour slug guide, portfolio ou autre chose.

La liste montre moins d’éléments que prévu

La requête ne peut pas inventer des commentaires correspondant à tous les critères. Si le widget demande cinq entrées mais que seulement trois commentaires approuvés appartiennent aux types et statuts autorisés, il en affichera trois.

Une erreur fatale apparaît après activation

Désactivez le plugin depuis l’administration. Si l’administration n’est plus accessible, renommez uniquement le dossier du mini-plugin par le moyen de gestion de fichiers habituel. Ne modifiez pas wp-includes pour tenter de réparer.

Commentaires, qualité éditoriale et AdSense

Les commentaires sont du contenu généré par les utilisateurs. Google indique que l’éditeur reste responsable de leur conformité sur les pages où du code publicitaire apparaît.

Cela a deux conséquences pratiques :

  1. seuls les commentaires réellement approuvés doivent être mis en avant ;
  2. une liste de commentaires récents ne remplace pas un article original, complet et utile.

Sur BlackFury, ce widget doit rester un accès secondaire vers les discussions. Il ne doit pas dominer une page pauvre ni faire remonter automatiquement un spam, un lien douteux ou une discussion hors contexte. La relance éditoriale repose sur les dossiers et les articles ; les commentaires servent à prolonger ces contenus, pas à en simuler la richesse.

Ce qu’il faut retenir

Le besoin de 2013 était légitime, mais la méthode ne l’était pas. Modifier un fichier de wp-includes crée une dette technique immédiate et la prochaine mise à jour peut tout effacer.

Pour le widget classique :

  1. diagnostiquez le commentaire manquant ;
  2. conservez status => approve ;
  3. autorisez explicitement les types et statuts publics voulus ;
  4. placez le filtre dans un petit plugin ;
  5. testez les liens hors connexion ;
  6. désactivez le plugin pour revenir en arrière.

Et si le site utilise le bloc Derniers commentaires, utilisez les réglages du bloc ou une extension conçue pour ce bloc : widget_comments_args ne cible pas ce composant.

Sources officielles

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.