web-dev-qa-db-fra.com

Le plugin Akismet supprime le spam malgré les préférences

Curieusement, Akismet supprime les anciens commentaires de spam après un certain temps (je suppose dans une semaine).

Cette case est PAS cochée:

Suppression automatique du spam envoyé sur des publications de plus d'un mois.

J'ai envoyé un message au support technique d'Akismet il y a plus d'une semaine, mais je n'ai pas encore reçu de réponse.

Je ne veux pas qu'Akismet supprime quoi que ce soit. Je ne vérifie pas assez souvent pour vérifier les faux positifs, alors je veux que tous les commentaires soient sauvegardés indéfiniment, même le spam.

Est-ce que quelqu'un sait pourquoi il supprime les commentaires de spam même s'il n'est pas configuré pour? Quelqu'un connaît-il une solution de rechange?

2
Sparky

Tout d’abord, il n’existe aucun paramètre permettant de ne pas supprimer les commentaires de spam. Ma confusion a été causée par une formulation ambiguë sur la page de configuration Akismet ...

Suppression automatique du spam envoyé sur des publications de plus d'un mois.

"plus d'un mois" fait référence à "posts" datant de plus d'un mois et non "spam envoyé sur des articles" datant de plus d'un mois.

En ce qui concerne la question initiale de savoir comment empêcher les commentaires d'être supprimés ...

Ils sont automatiquement supprimés au bout de 15 jours, peu importe le type . Akismet pense savoir mieux que quiconque! Ils supposent que vous souhaitiez supprimer le spam au bout de 2 semaines car ils supposent également qu’un délai de 15 jours est plus que suffisant pour que vous puissiez le vérifier. que le commentaire a été signalé correctement.

Je leur ai demandé pourquoi ils ne pouvaient pas simplement donner une option à l'utilisateur et j'ai eu une excuse sur la façon dont des milliers de commentaires de spam peuvent arrêter un serveur. Bien, c'est vrai. Mais la même chose pourrait arriver si le plugin Akismet n'était pas installé en premier lieu. Donnez un peu de crédit à l'administrateur pour qu'il puisse prendre sa propre décision concernant son installation. Mais cela ne va pas arriver.


Je réalise que l'édition de fichiers de base est mal vue, mais voici comment j'ai décidé de le gérer pour mon propre site.

Cette ligne dans le fichier wp-content/plugins/akismet/akismet.php ...

$comment_ids = $wpdb->get_col("SELECT comment_id FROM $wpdb->comments WHERE
DATE_SUB('$now_gmt', INTERVAL 15 DAY) > comment_date_gmt AND
comment_approved = 'spam'");

J'ai édité INTERVAL 15 DAY à 180 jours, ce qui me donnait suffisamment de temps pour examiner les commentaires avant leur suppression.

EDIT:

Chaque fois que le plugin est mis à jour, une telle modification devra être réappliquée.


EDIT 2:

Selon la suggestion utile de @ChipBennett, j'ai créé un plugin qui ne fait que désactiver la suppression des commentaires par le plugin Akismet. Cette chose simple évite toute la question de la nécessité de modifier le plugin Akismet.

J'ai simplement créé le fichier php suivant et l'ai placé dans le répertoire plugins (wp-content/plugins/)

<?php
/**
 * @package Akismet_keep_comment
 * @version 1.0
 */
/*
Plugin Name: Akismet Keep Comment
Plugin URI: 
Description: This plugin removes the comment deletion ability of the Akismet plugin
Author: Me
Version: 1.0
Author URI: http://www.mysite.com
*/

remove_action('akismet_scheduled_delete', 'akismet_delete_old');

?>

Ensuite, je l'ai "activé" via la page du plugin du tableau de bord.

0
Sparky

En général, je ne recommanderais pas de modifier les fichiers pour les plug-ins que vous ne contrôlez pas. Le mieux serait d’écrire votre propre site/plugin personnalisé, pour contrôler ce hook:

add_action('akismet_scheduled_delete', 'akismet_delete_old');

Tout d'abord, pour arrêter complètement la suppression, appelez simplement:

remove_action('akismet_scheduled_delete', 'akismet_delete_old');

Ensuite, vous pouvez configurer un travail cron (ou similaire) pour activer la fonction akismet_delete_old() à la fréquence que vous préférez.

Modifier

Pour être plus clair: je fais référence à un site/plugin personnalisé, qui interagit avec Akismet - et non un fork/replacement de Akismet. Étant donné qu'Akismet ajoute la fonctionnalité de suppression de commentaire en tant que rappel à un hook d'action spécifique au plug-in, vous pouvez remplacer cette action ajoutée depuis en dehors de le plugin.

L'appel remove_action() ci-dessus arrêtera simplement l'exécution du code de suppression de commentaire. Si vous souhaitez activer la suppression de commentaires moins fréquents, vous pouvez utiliser plusieurs méthodes:

  1. Réécrivez le callback akismet_delete_old() (comme vous l'avez fait dans votre propre réponse), puis raccordez-le à akismet_scheduled_delete
  2. Ecrivez votre propre travail cron à exécuter sur la fréquence souhaitée
  3. Etc.

Remarque : il existe également un rappel compagnon, akismet_delete_old_meta(), que vous devrez peut-être modifier/supprimer de l'action akismet_scheduled_delete.

3
Chip Bennett