web-dev-qa-db-de.com

Akismet-Plugin löscht Spam trotz Einstellungen

Seltsamerweise löscht Akismet alte Spam-Kommentare nach einiger Zeit (ich vermute, innerhalb einer Woche).

Dieses Kästchen ist NICHT markiert:

Automatisches Löschen von Spam-Nachrichten, die über einen Monat alt sind.

Ich habe vor mehr als einer Woche eine Nachricht an den Akismet-Support gesendet, aber noch keine Antwort erhalten.

Ich möchte nicht, dass Akismet etwas löscht. Ich überprüfe nicht oft genug, um Fehlalarme zu verifizieren. Daher möchte ich, dass alle Kommentare auf unbestimmte Zeit gespeichert werden, auch der Spam.

Weiß jemand, warum Spam-Kommentare gelöscht werden, obwohl dies nicht der Fall ist? Kennt jemand eine Problemumgehung?

2
Sparky

Erstens gibt es keine Einstellung, um Spam-Kommentare nicht zu löschen. Meine Verwirrung wurde durch mehrdeutige Formulierungen auf der Akismet-Konfigurationsseite verursacht ...

Automatisches Löschen von Spam-Nachrichten, die über einen Monat alt sind.

"älter als ein Monat" bezieht sich auf "Posts" , die älter als ein Monat sind, nicht auf "Spam, der auf Posts gesendet wurde" , die älter als ein Monat sind.

Soweit die ursprüngliche Frage, wie das Löschen der Kommentare verhindert werden soll ...

Sie werden automatisch nach 15 Tagen gelöscht , egal was . Akismet glaubt, dass sie es am besten wissen! Sie gehen davon aus, dass Sie möchten, dass der Spam nach 2 Wochen gelöscht wird, da sie auch davon ausgehen, dass 15 Tage mehr als genug Zeit für die Überprüfung sind dass der Kommentar korrekt markiert wurde.

Ich habe sie gefragt, warum sie dem Benutzer nicht einfach eine Option geben können, und ich habe eine Entschuldigung dafür erhalten, wie Tausende von Spam-Kommentaren einen Server herunterfahren können. Gut, das stimmt. Das Gleiche könnte passieren, wenn das Akismet-Plugin nicht installiert wäre. Geben Sie dem Administrator ein wenig Anerkennung dafür, dass er seine Entscheidung bezüglich seiner Installation selbst treffen kann. Aber das wird nicht passieren.


Mir ist klar, dass das Bearbeiten von Core-Dateien verpönt ist, aber so habe ich beschlossen, es für meine eigene Site zu handhaben.

Diese Zeile in der Datei 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'");

Ich habe INTERVAL 15 DAY an 180 Tagen bearbeitet, sodass ich mehr als genug Zeit habe, um Kommentare vor dem Löschen zu überprüfen.

EDIT:

Jedes Mal, wenn das Plugin aktualisiert wird, muss eine solche Änderung erneut angewendet werden.


EDIT 2:

Gemäß dem hilfreichen Vorschlag von @ChipBennett habe ich ein Plugin erstellt, das nichts anderes tut, als das Löschen von Kommentaren durch das Akismet-Plugin zu deaktivieren. Diese einfache Sache vermeidet das ganze Problem, das Akismet-Plugin modifizieren zu müssen.

Ich habe einfach die folgende php-Datei erstellt und in das Plugins-Verzeichnis (wp-content/plugins/) gestellt

<?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');

?>

Dann habe ich es über die Plugin-Seite des Dashboards "aktiviert".

0
Sparky

Ich würde generell nicht empfehlen, Dateien für Plugins zu ändern, die Sie nicht kontrollieren. Besser wäre es, eine eigene Site/ein eigenes Plugin zu schreiben, um diesen Hook zu steuern:

add_action('akismet_scheduled_delete', 'akismet_delete_old');

Um den Löschvorgang vollständig abzubrechen, rufen Sie einfach Folgendes auf:

remove_action('akismet_scheduled_delete', 'akismet_delete_old');

Anschließend können Sie einen Cron-Job (oder ähnliches) einrichten, um die Funktion akismet_delete_old() auf der von Ihnen bevorzugten Frequenz auszulösen.

Bearbeiten

Um es klarer zu machen: Ich beziehe mich auf eine Site/ein benutzerdefiniertes Plugin, dasmitAkismet -nichtinteragiert. eine Gabel/Ersatz von Akismet. Da Akismet die Funktion zum Löschen von Kommentaren als Rückruf zu einem für das Plugin spezifischen Aktionshook hinzufügt, können Sieüberschreibendie hinzugefügte Aktion ausaußerhalbdes Plugins.

Der obige Aufruf remove_action() verhindert einfach, dass der Code zum Löschen von Kommentaren überhaupt ausgeführt wird. Wenn Sie das seltenere Löschen von Kommentaren aktivieren möchten, können Sie verschiedene Methoden verwenden:

  1. Schreiben Sie den akismet_delete_old()-Rückruf neu (wie Sie es in Ihrer eigenen Antwort getan haben) und schließen Sie ihn dann an akismet_scheduled_delete an.
  2. Schreiben Sie Ihren eigenen Cron-Job, um ihn auf der gewünschten Frequenz auszuführen
  3. Usw.

Hinweis : Es gibt einen begleitenden Rückruf, akismet_delete_old_meta(), den Sie möglicherweise auch in der Aktion akismet_scheduled_delete ändern/entfernen müssen.

3
Chip Bennett