前回、日本語(ひらがな)を含まないコメントを拒否する方法を紹介しました。
当然ですが、日本語のスパムコメントには対応できません。そこで、今回は JavaScript が無効な場合にコメントを拒否する方法を紹介します。
何故、この方法がスパム対策になるのかというと、一般的なブラウザは JavaScript が有効な状態であるのに対し、bot は JavaScript を解析できないケースが多いからです。最近では、JavaScript をある程度解析するものもあるようですが、まだまだ有効な手段だと思われます。
JavaScript が無効な場合にコメントを拒否
functions.php 等に、下記コードを追加します。
/**
* コメントフォームに、JavaScript(jQuery) で隠しフィールドを追加します。
*/
function my_enqueue_scripts_comment() {
if ( ! comments_open() ) {
return;
}
if( !wp_script_is( 'jquery', 'done' ) ) {
wp_enqueue_script( 'jquery' );
}
$script = '
jQuery(function($) {
$("form#commentform").append(\'<input type="hidden" name="commentform_js_checker" id="commentform_js_checker" value="on" />\');
});';
wp_add_inline_script( 'jquery-migrate', $script, 'after' );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts_comment' );
/**
* コメントフォームに、JavaScript(jQuery) で追加した隠しフィールドがないをコメントを拒否します。
*/
function my_pre_comment_on_post_js( $comment_post_ID ) {
if ( ! isset( $_POST['commentform_js_checker'] ) || $_POST['commentform_js_checker'] != 'on' ) {
wp_die( '<strong>エラー</strong>: JavaScript を有効にしてください。' );
}
}
add_action( 'pre_comment_on_post', 'my_pre_comment_on_post_js' );
コメントフォームにメッセージを追加
前回は、コメント欄の下にメッセージを追加する方法を紹介しました。
今回は、コメントフォームの下([コメントを送信] ボタンの下)に追加してみたいと思います。この場合は下記のコードになります。
/**
* コメントフォームの下にメッセージを追加します。
*/
function my_comment_form_message() {
echo '<p>JavaScript が無効な場合はコメントできません。</p>';
}
add_action( 'comment_form', 'my_comment_form_message' );
最後に
上記の方法は、JavaScript(jQuery) でコメント フォームに隠しデータ(input 要素に type=”hidden”)を追加するという簡単な方法なので、bot に対策されると簡単にすり抜けられてしまいます。他のスパムコメント対策と併用することをお勧めしておきます。
次回は、コメントフォームに CAPTCHA を追加する方法を紹介したいと思います。