1,749 views
この記事は最終更新から 1855日 が経過しています。
前回の (30) WordPressで独自ログインパラメータを追加する#2(画像化) では、WordPressのログイン画面にスパム対策のための独自の認証項目(認証コード画像を表示)を追加した。
現在スパム対策で使用している SI Captcha Anti-Spam と置き換えるためには、コメント入力欄でもこれが使えなければならない。
そこで、コメント対応してみた。
■プログラム
前回のプログラム mysecuritylogin.php を一部変更した。
画像作成プログラム gen_img.php は今回は変更なしだ。
ログインのフックでは login_form, wp_authenticate_user を使用した。
今回のコメント投稿のフックでは comment_form, preprocess_comment を使う。
<?php /* Plugin Name: MySecurityLogin */ add_action('init', 'my_session_start'); function my_session_start(){ if("" == session_id()){ session_start(); } } //////////////////////////////////////////////////////////////////////// if (class_exists('MySecurityLogin')) { $obj = new MySecurityLogin(); } //////////////////////////////////////////////////////////////////////// class MySecurityLogin { ////////////////////////////////////////////////////////////////////// public function __construct() { add_action( 'login_form', array($this, 'proc_add_login_field')); add_action( 'wp_authenticate_user' , array($this, 'proc_authenticate'), 99, 1); add_action( 'comment_form', array($this, 'proc_add_post_field')); add_action( 'preprocess_comment', array($this, 'proc_save_comment'), 99, 1); } ////////////////////////////////////////////////////////////////////// public function proc_add_login_field() { $my_path = plugins_url('gen_img.php',__FILE__); echo <<< EOM <p style="text-align:center"><img src="{$my_path}"></p> <input type="text" name="add_sec_code" class="input" value="" /> EOM; } ////////////////////////////////////////////////////////////////////// public function proc_add_post_field() { $my_path = plugins_url('gen_img.php',__FILE__); echo <<< EOM <p><img src="{$my_path}"></p> <input type="text" name="add_sec_code" class="input" value="" /> EOM; } ////////////////////////////////////////////////////////////////////// public function proc_authenticate( $user ) { if(FALSE === $this->is_code_ok()){ return new WP_Error(); } return $user; } ////////////////////////////////////////////////////////////////////// public function proc_save_comment( $commentdata ) { if(FALSE === $this->is_code_ok()){ wp_die(__('Sorry, try again.')); } return $commentdata; } ////////////////////////////////////////////////////////////////////// public function is_code_ok() { $ret = FALSE; if(FALSE === isset($_SESSION['MySecurityLoginOTT'])){ goto tagEND; } if(FALSE === isset($_POST['add_sec_code'])){ goto tagEND; } if($_SESSION['MySecurityLoginOTT'] != $_POST['add_sec_code']){ goto tagEND; } $ret = TRUE; // ok tagEND: return $ret; } } ?>