WordPress スパムコメント対策 その2

前回、日本語(ひらがな)を含まないコメントを拒否する方法を紹介しました。

当然ですが、日本語のスパムコメントには対応できません。そこで、今回は 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 を追加する方法を紹介したいと思います。

コメントを残す

メールアドレスが公開されることはありません。

日本語でコメントを入力してください。