(31) 【WORDPRESS】独自ログインパラメータを追加する#3(コメント対応)

投稿者: | 2017年8月28日

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;
  }
}
?>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)