
Désactiver les commentaires sur les fichiers joints dans WordPress

Récemment, j’ai commencé à subir une vague de spam sur la page « attachment » d’une image d’illusatration d’article liée à editorconfig. Bizarrement je n’ai pas les options pour désactiver les commentaires sur cette page, du coup je dois la jouer autrement.
Je vous laisse juger aux notifications mail :
Il n’y a pas de réglages spécifiques pour les commentaires sur les fichiers joints, il faut donc procéder de manière un peu détournée et pour ça on va faire appel à deux éléments de WordPress différents.
La force des thèmes enfants
La mise en place d’un thème enfant devrait être une obligation dès que vous voulez utiliser un thème communautaire. C’est ce que j’ai fait sur ce blog dès le premier ravalement, et je ne regrette absolument pas.
Dans un thème enfant on définit notamment un fichier principal functions.php qui va contenir toutes nos directives maisons. Au fil du temps j’y ai inclus pas mal de choses, suppression des query string, masquage des détails de login, et autres petits raffinements. À noter que comme n’importe quel fichier php, rien ne vous empêche de mettre vos codes maison dans un fichier à part et de procéder à une inclusion dans functions.php ensuite, si vous multipliez les éléments maison pour la lisibilité c’est peut-être mieux.
On va donc ajouter une fonction de plus :
1 2 3 4 5 6 7 |
function disable_media_comments( $post_id ) { if( get_post_type( $post_id ) == 'attachment' ) { wp_die("Comment not allowed."); } return $open; } add_action( 'pre_comment_on_post', 'disable_media_comments' ); |
Cette fonction ajoute une vérification lors de l’ajout d’un commentaire, si on est sur un type attachment on renvoie une erreur sans traiter le commentaire.
La base de données pour nettoyer les contenus existants
J’ai déjà eu à jouer avec par le passé pour désactiver les pings, et il me semble que ça avait fait l’objet d’une astuce diverse. L’idée est donc de modifier massivement les attachments pour désactiver les commentaires manuellement :
1 |
UPDATE `wp_posts` SET `comment_status` = 'closed' WHERE `post_type` = 'attachment' AND `comment_status` = 'open'; |
C’est aussi simple que ça. Évidemment disclaimer faites une sauvegarde avant toussa…
D’autres pistes ?
La seule autre solution que j’ai pu lire consistait à désactiver tous les commentaires. Sauf que vous le savez, j’aime justement vos retours sur les bêtises que je peux raconter, du coup, je les laisse activé. Cette fonction supplémentaire ne coûte pratiquement rien en ressources, donc on va pas s’en plaindre. Sinon en analysant les logs j’ai découvert que les POST étaient fait en HTTP 1.0. Je pourrais éventuellement désactiver le protocole si je vois qu’il ne sert à rien d’autre que ça 🙂
C’est curieux car à l’époque où j’utilise WordPress (jusqu’à 2014) il y avait déjà la possibilité de désactiver les commentaires dans l’interface d’administration sur les pièces-jointes. Du coup je suis surpris que ce n’est pas déjà le cas sur ton instance WordPress.