# Désactiver complètement les commentaires sur WordPress, sans extension

> Décocher une case dans les réglages ne suffit pas : les commentaires restent ouverts par type de contenu. Voici comment les couper vraiment.

- Auteur : Clément Hadrot
- Publié le : 2020-10-08
- Mis à jour le : 2020-10-08
- Catégorie : Tips
- URL : https://wpmoderne.dev.wordpress-developpement.fr/tips/desactiver-commentaires-sans-extension/

## L’essentiel

- comments_open et pings_open filtrent l'ouverture au niveau global
- Les menus admin peuvent être masqués proprement
- Les flux de commentaires doivent aussi être fermés

Sur un site vitrine pour un cabinet d'expertise-comptable, le client m'a demandé une chose simple en apparence : « pas de commentaires, nulle part, jamais ». Décocher la case « Autoriser les commentaires sur les nouveaux articles » dans Réglages > Discussion m'a semblé suffisant. Une semaine plus tard, un commentaire indésirable apparaissait sur une page créée avant ce changement, dont le réglage individuel restait activé.

Le réglage global de WordPress ne s'applique qu'aux futurs contenus ; il laisse intacts les réglages déjà enregistrés sur chaque article ou page. Pour une désactivation vraiment complète, il faut agir à plusieurs niveaux : la requête, l'affichage, l'administration et les flux RSS dédiés aux commentaires.

## Fermer les commentaires et pings au niveau global

Les filtres `comments_open` et `pings_open` permettent de forcer la fermeture quel que soit le réglage individuel enregistré sur chaque contenu, sans avoir à modifier des milliers de lignes en base de données.

```
function cabinet_fermer_commentaires() {
    return false;
}
add_filter( 'comments_open', 'cabinet_fermer_commentaires', 20, 2 );
add_filter( 'pings_open', 'cabinet_fermer_commentaires', 20, 2 );
```

Cette méthode a un avantage net sur une mise à jour en masse en base de données : elle est réversible instantanément en désactivant simplement la fonction, sans avoir à ré-ouvrir article par article.

## Retirer les commentaires déjà publiés de l'affichage

Fermer les commentaires empêche d'en poster de nouveaux, mais n'efface pas ceux déjà publiés. S'il faut aussi les masquer sans les supprimer, un filtre sur `comments_array` vide la liste avant l'affichage du template.

> L'essentiel à retenir : comments_open et pings_open filtrent l'ouverture au niveau global ; Les menus admin peuvent être masqués proprement ; Les flux de commentaires doivent aussi être fermés

```
function cabinet_masquer_commentaires_existants( $comments ) {
    return array();
}
add_filter( 'comments_array', 'cabinet_masquer_commentaires_existants', 10, 2 );
```

## Masquer les menus liés aux commentaires

Une fois les commentaires fermés, l'entrée « Commentaires » du menu d'administration et le widget « Discussion » du tableau de bord n'ont plus d'utilité et ne font que semer la confusion chez les rédacteurs.

```
function cabinet_masquer_menu_commentaires() {
    remove_menu_page( 'edit-comments.php' );
}
add_action( 'admin_menu', 'cabinet_masquer_menu_commentaires' );

function cabinet_masquer_widget_discussion() {
    remove_meta_box( 'dashboard_recent_comments', 'dashboard', 'normal' );
}
add_action( 'wp_dashboard_setup', 'cabinet_masquer_widget_discussion' );
```

Il faut aussi retirer la bulle de commentaires dans la barre d'administration, qui reste visible même après avoir masqué le menu principal :

```
function cabinet_masquer_bulle_commentaires() {
    if ( is_admin_bar_showing() ) {
        remove_action( 'admin_bar_menu', 'wp_admin_bar_comments_menu', 60 );
    }
}
add_action( 'init', 'cabinet_masquer_bulle_commentaires' );
```

## Fermer les flux RSS dédiés aux commentaires

WordPress génère par défaut un flux global (`/comments/feed/`) et un flux par article. Les laisser actifs alors que les commentaires sont fermés partout ailleurs est incohérent, et certains agrégateurs continuent de les interroger inutilement.

- Rediriger `/comments/feed/` vers la page d'accueil via une règle dans `template_redirect`.
- Retirer le lien `<link rel="alternate">` pointant vers ce flux, généré par `feed_links_extra`.
- Vérifier qu'aucun thème enfant n'affiche encore le nombre de commentaires dans sa boucle d'articles.

## Couvrir tous les types de contenu, y compris les futurs CPT

Un piège fréquent : désactiver les commentaires sur les articles et les pages, puis oublier qu'un type de contenu personnalisé ajouté plus tard hérite par défaut du support `comments` s'il est déclaré ainsi dans `register_post_type()`. Le plus sûr reste de retirer explicitement ce support à la déclaration :

```
register_post_type( 'etude_de_cas', array(
    'supports' => array( 'title', 'editor', 'thumbnail' ), // pas de 'comments'
    // ...
) );
```

> Sur un site sans aucun commentaire prévu, je retire aussi le support `comments` du type `post` lui-même avec `remove_post_type_support( 'post', 'comments' )`, en plus des filtres ci-dessus : la ceinture et les bretelles, pour un client qui ne veut vraiment plus jamais en entendre parler.

## En résumé

Une désactivation complète des commentaires combine quatre leviers : les filtres `comments_open`/`pings_open` pour empêcher toute nouvelle soumission, le filtrage de l'affichage pour les commentaires existants, le nettoyage des menus d'administration, et la fermeture des flux RSS dédiés. Traiter uniquement le réglage global dans Discussion laisse toujours des trous, particulièrement sur les contenus créés avant le changement.
