【WordPress】JavaScriptの作動しない環境からのコメントを拒否する
問題
スパムコメントって多いですよね。
コメント書き込みロボットでいきなりPOSTしてくるタイプを防いでみようと思うのですが、JavaScriptの作動しない環境からのコメントを拒否する仕掛けなんて作れますか?

答え
コメントフォームのsubmitイベントで、JavaScriptで何らかの値をセットして、その値が送信されてこないとコメントを受け付けない仕組みを作ってみた。
1、コメントフォームにhiddenの項目を追加
nameは適当。スパムチェックっぽい名前を付けた。
<input type="hidden" name="spmc" value="">
2、コメントフォームにJavaScriptの仕掛けを入れる
ページのどこかか、外部JSファイルのどこかに以下を追加。
コメント送信フォームのsubmitイベントで1のhiddenのinputに値をセットしている。
$(function(){
$('#commentform').on('submit', function(){this.spmc.value='1';});
});
3、コメント処理前のフックでチェックする
テーマファイルの functions.php などに、以下を追記。
function my_custome_spam_filter($comment_post_ID)
{
$spmc = (isset($_POST['spmc']) ? trim($_POST['spmc']) : null);
if ($spmc !== '1') {
wp_die('エラーです。');
}
}
add_action('pre_comment_on_post', 'my_custome_spam_filter');
以上で、JavaScriptが動かない環境からコメントをするとエラー扱いする。