2,406 views
この記事は最終更新から 2858日 が経過しています。
前回の (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;
}
}
?>
アクセス数(直近7日): ※試験運用中、BOT除外簡易実装済2026-06-23: 0回 2026-06-22: 8回 2026-06-21: 2回 2026-06-20: 1回 2026-06-19: 1回 2026-06-18: 1回 2026-06-17: 5回