ソースを読み切れてないので、自己責任で!!
・ログイン画面に、ダミーの入力項目を作成する
・ダミーの入力項目に、何か入力されているとエラーにする
こんな感じの動作をするプラグインを作成してみました。
<?php
/*
Plugin Name: login guard
Version: 0.1
Plugin URI:
Description:
Author: sample
Author URI:
*/
add_filter('login_form','login_guard_login_form');
add_filter( 'wp_authenticate_user', 'login_guard_authenticate_username_password', 9, 3);
function login_guard_authenticate_username_password($user, $username, $password) {
//入力が空でなければエラーにする
if (!empty($_POST['dummy_code'])) {
$error = new WP_Error();
$print_error = __('ERROR', 'login_guard');
$empty_captcha = __('ERROR', 'login_guard');
$error->add('login_guard', "<strong>$print_error</strong>: $empty_captcha");
return $error;
}
return $user;
}
function login_guard_login_form() {
$ouput = <<< EOF
<p><label><br>
5 + 6 = <input id="dummy_code" name="dummy_code" class="input" type="text" size="10" value=""/>
</label>
</p>
<br />
EOF;
echo $ouput;
return true;
}
少し動作させた限りでは大丈夫そうな雰囲気です。
認証関係の部分
wp_authenticate_userなんですが、/wp-includes/user.phpの「function wp_authenticate_username_password($user, $username, $password) 」の中でapply_filtersされてます。$user = apply_filters( 'wp_authenticate_user', $user, $password );
if ( is_wp_error($user) )
return $user;
このあたりのソースを読む限りでは、パスワードなどの認証が終わった後に、これが呼び出されて、WP_Errorオブジェクトを返すと認証エラーとして処理されるようになっています。この仕組みに乗っかるのが一番簡単そうに思います。ソースを見てみたプラグイン
・SI CAPTCHA Anti-Spam — WordPress Plugins・Captcha by BestWebSoft — WordPress Plugins
主に1つめのソースを少し読んで、結局、Wordpressの/wp-includes/user.phpを見てみました。
スポンサーリンク
コメントを残す