web-dev-qa-db-ja.com

Akismetプラグインは好みに関わらずスパムを削除しています

不思議なことに、Akismetはしばらくして古いスパムのコメントを削除しています(私は1週間以内に推測しています)。

このボックスは_チェックされていません

1ヶ月以上前の投稿に送信されたスパムを自動削除する。

私は1週間以上前にAkismetサポートにメッセージを送りましたが、まだ返事を受け取っていません。

Akismetに何も削除させたくありません。誤検知を検証するのに十分な頻度でチェックしないので、すべてのコメントを無期限に、スパムも含めて保存したいです。

それが設定されていないのになぜスパムのコメントを削除しているのか誰かが知っていますか?誰かが回避策を知っていますか?

2
Sparky

まず、スパムコメントを削除しない設定はありません。私の混乱は、Akismetの設定ページでの曖昧な表現が原因でした...

1ヶ月以上前の投稿に送信されたスパムを自動削除する。

"1ヶ月以上" "投稿" を指しており、1ヶ月以上前のものであり 1ヶ月以上前の「投稿に投稿されたスパム」.

コメントが削除されないようにする方法に関する元の質問に関しては...

それらは15日後に自動的に削除されますに関係なくAkismetは彼らが最もよく知っていると考えています!15日は検証に十分な時間よりも長いと仮定しているため、2週間後にスパムを削除します。コメントに正しくフラグが立てられたこと。

なぜ彼らがユーザーに選択肢を与えることができなかったのか、そして何千ものスパムコメントがサーバーをシャットダウンさせることができるという言い訳をしました。いいですね。しかし、Akismetプラグインがそもそもインストールされていなかった場合も同じことが起こり得ます。彼のインストールに関して彼自身の決定を下すことができるということについて管理者に少しの信用を与えてください。しかし、それは起こらないでしょう。


私は、コアファイルの編集が眉をひそめていることを認識していますが、ここで私が自分のサイトのためにそれを処理することにしたのです。

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

私はINTERVAL 15 DAYを180日に編集しました。削除する前にコメントをレビューするのに十分な時間がありました。

編集:

プラグインが更新されるたびに、そのような修正を再適用する必要があります。


編集2:

@ChipBennettによる有用な提案に従って、私はAkismetプラグインによるコメントの削除を無効にする以外の何もしないプラグインを作成しました。この単純なことは、Akismetプラグインを修正しなければならないという問題全体を回避します。

私は単純に次のphpファイルを作成して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');

?>

それから私はダッシュボードのプラグインページでそれを "有効にしました"。

0
Sparky

通常、管理していないプラグインのファイルを変更することはお勧めしません。このフックを制御するには、独自のサイト/カスタムプラグインを作成する方が良いでしょう:

add_action('akismet_scheduled_delete', 'akismet_delete_old');

最初に、削除を完全に停止するには、単に呼び出します:

remove_action('akismet_scheduled_delete', 'akismet_delete_old');

次に、cronジョブ(または同様のもの)をセットアップして、akismet_delete_old()関数を任意の頻度で起動できます。

編集

より明確にするために:Akismet-notフォーク/交換と対話するサイト/カスタムプラグインを参照していますアキスメットの。 Akismetは、コメント削除機能をプラグイン固有のアクションフックへのコールバックとして追加するため、overrideからoutsideプラグイン。

上記のremove_action()呼び出しは、コメント削除コードの実行をまったく停止します。頻度の低いコメントの削除を有効にする場合は、いくつかの方法を使用できます。

  1. (独自の回答で行ったように)akismet_delete_old()コールバックを書き直し、akismet_scheduled_deleteにフックします
  2. 希望の頻度で実行する独自のcronジョブを作成します
  3. 等。

akismet_scheduled_deleteアクションから変更/削除する必要がある場合があるコンパニオンコールバックakismet_delete_old_meta()もあります。

3
Chip Bennett