tips

WordPressのコメント欄にキャプチャを設定する

Really Simple CAPTCHAをコメント欄に応用する

WordPressのスパムコメント、スパムメールは結構困り者で、キャプチャ(画像認証)を導入するケースも多いと思われる。ところで、Contact Form 7には公式モジュールとしてReally Simple CAPTCHAがあり、名前のとおり軽量でデザイン性も高くありながら、大抵のブログにとって必要充分な機能をもたらしてくれるという優れもの。一方でコメントスパム防止に導入できるキャプチャプラグインも幾つかあるわけだが、Contact Form 7を使っているなら、デザインの整合性からいってこれが流用できるとプラグイン構成の簡素化もできてうれしいのでやってみた、という記事です。

 

CODE:using Really Simple CAPTCHA for wordpress comments

以下、コメントフォームへの挿入とヴァリデーションを有効化するコードです。functions.phpに記入、my_comment_captcha以下のフォームの記述は、テーマに合わせて変更します。Contact Form 7での設置の仕方は、公式でどうぞ。

<?php
// コメント欄にアンチスパム・キャプチャを追加
// contact-form7用プラグイン Really Simple CAPTCHA をインストール済の場合だけ有効
if ( !is_user_logged_in() && class_exists('ReallySimpleCaptcha') ) :

function my_comment_captcha() {
    $captcha = new ReallySimpleCaptcha();
    // 以下キャプチャのサイズや色をカスタマイズ
    // $captcha->img_size = array( '72', '24' ); //画像サイズ
    // $captcha->fg = array( '0', '0', '0' ); // 文字色
    // $captcha->bg = array( '255', '255', '255' ); // 画像背景色
    $captcha_word = $captcha->generate_random_word();
    $captcha_prefix = mt_rand();
    $captcha_src = $captcha->generate_image($captcha_prefix, $captcha_word); // Generate CAPTCHA image
?>
<p class="comment-form-captcha">
    <label for="captcha_code">キャプチャ *</label>
    <img src="<?php echo site_url(). '/wp-content/plugins/really-simple-captcha/tmp/' . $captcha_src; ?>" alt="captcha" width="<?php echo $captcha->img_size[0]; ?>" height="<?php echo $captcha->img_size[1]; ?>" />
    <input id="comment_captcha_code" name="comment_captcha_code" size="<?php echo $captcha->char_length; ?>" type="text" />
    <input id="comment_captcha_prefix" name="comment_captcha_prefix" type="hidden" value="<?php echo $captcha_prefix; ?>" />
</p>
<?php
}
add_action( 'comment_form_after_fields' , 'my_comment_captcha' );//#url.inputと#comment.textareaの間に挿入

function my_check_comment_captcha( $approved, $comment_data ) {
    $captcha = new ReallySimpleCaptcha();
    $captcha_prefix = $_POST['comment_captcha_prefix']; // ユーザー入力によるキャプチャレスポンス
    $captcha_code = $_POST['comment_captcha_code']; // ヴァリデーション
    $captcha_correct = $captcha->check( $captcha_prefix, $captcha_code ); // ヴァリデーションチェックが通ると[true]を返す
    if ( !$captcha_correct ) wp_die('キャプチャコードが間違っています。再入力してください。', 200); //エラーコード200を設定すると、他のコメントヴァリデートと同じ挙動になる
    $captcha->remove( $captcha_prefix );
    $captcha->cleanup();
    return $approved;
}
add_filter( 'pre_comment_approved', 'my_check_comment_captcha', 99, 2 );

endif; // if ( class_exists('ReallySimpleCaptcha') ):
?>

 

関連リンクとダウンロード

sc 2015-03-28 14.45.32

実はこれ結構古いネタで、アンチョコは2010年の「Using Really Simple CAPTCHA Plugin for Comments」というやつです。いつの間にかこの記事の筆者はプラグイン化したみたいで、それは試してません。ちょっと弄れば短くなるからfunctions.phpでもええんちゃうかなー、どうせコメント周りの関数いくつかあるしなー、ってことで今にいたります。ヴァリデーション前後の動作も改変してるのでほとんど別ものですが。コンタクトフォームは数あれど、やっぱContact Form 7が好きだなー、という私のような人にどうぞ。

本家サイト:Really Simple CAPTCHA / contact form 7

Your Comment

コードの記述は<pre>または<code>タグで括って下さい。自動的にエスケープされます。

 

右の文字を入力して下さい captcha