SOFTELメモ

Softel Inc.

【WordPress】スパム判定になったコメントを登録したくない(プラグイン作成)

問題

WordPressの設定→ディスカッションのところにコメントブラックリストの設定がありますよね。

コメントブラックリストでスパムだと判定されたコメントは、スパムに入れないで、ゴミ箱にも入れないで、最初から登録しないで欲しいんですけど、そういうのできますか?

wordpress

答え

プラグインで、できそう。

WordPressがコメントブラックリストを使ったスパム判定をした後で、我々もスパム判定するチャンスがある。

使うのはフィルターの「pre_comment_approved」。

このフィルターが呼ばれるタイミングは、コメントが wp_insert_comment()で登録される前で、WordPressが「承認する(1)/承認待ちにする(0)/スパム(‘spam’)」の判定をするwp_allow_comment()の中で、WordPressの判定の後になる。

「WordPressはスパムと判定したけど、あなたはどう思う?」という感じのタイミング。

ここで、「WordPressさんがスパムだと思ったのなら、登録しなくていいよ(処理中止)」ということにしてみる。

function my_spam_comment_filter($approved, $commentdata)
{
	if ($approved === 'spam') {
		wp_die('NGワードを含むコメントは受け付けておりません。');
	}
	return $approved;
}
add_filter('pre_comment_approved', 'my_spam_comment_filter', 1, 2);

WordPressの判断($approved)に加えて、コメントについての情報($commentdata)も渡せるので、内容を見てから判断するようにしてもよい。

$commentdata の方には、以下のようなデータが渡される。

array (
  'comment_post_ID' => 236,
  'comment_author' => 'テスト',
  'comment_author_email' => 'test@example.com',
  'comment_author_url' => 'http://テスト',
  'comment_content' => 'NGワード入りコメント
NGワード入りコメント',
  'comment_type' => '',
  'comment_parent' => 0,
  'user_ID' => 0,
  'user_id' => 0,
  'comment_author_IP' => '117.55.68.13',
  'comment_agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11',
  'comment_date' => '2012-12-28 03:23:04',
  'comment_date_gmt' => '2012-12-27 18:23:04',
  'filtered' => true,
)

画面はこのようになる。

wordpress-ng-word

これで、承認待ちか承認済みしか発生せず、わずらわしいスパムの確認、掃除をしなくてよくなると思います。

WordPress公式プラグインディレクトリに登録

spam-blocker-s1

WordPress管理画面で「spam-blocker-s1」で検索すると出てきます。簡単にインストールできます。

単純なソースなので、改造のベースにしていただくもよし です。

関連するメモ

コメント