在”分享一个WordPress邀请码注册插件 – Easy Invitation Codes”文章中有提到一旦开放注册账户功能,势必我们就应该考虑是否有垃圾注册信息的问题,这个与我们文章评论验证过滤还是有一定的关系的。所以,顺带的就引申出关于注册账户的时候,验证码插件或者实现方法问题。
关于注册账户的时候,我们依旧可以实现多种验证过滤模式,比如我们常见的有滑动移动滚动条模式、选择物件种类模式、拖动拼图模式,以及完成验证问题的模式。在这篇文章中,先分享一个使用插件,一种不适用插件自定义问题回答模式。
第一、SI CAPTCHA Anti-Spam插件
SI CAPTCHA Anti-Spam插件功能还是蛮强大的,支持文章评论、注册验证多种模式。安装之后,我们需要设置才可以生效。
看到了不?支持的地方很多吧,包括登录的时候都可以激活验证模式。
第二、自定义验证问题验证方式
function rand_reg_question(){
$register_number=rand(0,1); // 设置随机数的返回范围
$_SESSION[‘register_number’]=$register_number;
}
add_action(‘login_head’,’rand_reg_question’);global $register_questions;
global $register_answers;
// 添加问题数组
$register_questions=array(‘中国的首都在哪里?’,’Google是哪个国家的公司?’);
// 添加答案数组(与上面的问题对应)
$register_answers=array(‘北京’,’美国’);add_action( ‘register_form’, ‘add_security_question’ );
function add_security_question() {
global $register_questions;
$register_number=$_SESSION[‘register_number’];
?>
<p>
<label><?php echo $register_questions[$register_number];?><br />
<input type=”text” name=”user_proof” id=”user_proof” class=”input” size=”25″ tabindex=”20″ />
</label>
</p>
<?php }add_action( ‘register_post’, ‘add_security_question_validate’, 10, 3 );
function add_security_question_validate( $sanitized_user_login, $user_email, $errors) {
global $register_answers;
$register_number=$_SESSION[‘register_number’];
if (!isset($_POST[ ‘user_proof’ ]) || empty($_POST[ ‘user_proof’ ])) {
return $errors->add( ‘proofempty’, ‘<strong>错误</strong>: 您还没有回答问题。’ );
} elseif ( strtolower( $_POST[ ‘user_proof’ ] ) != $register_answers[$register_number] ) {
return $errors->add( ‘prooffail’, ‘<strong>错误</strong>: 您的回答不正确。’ );
}
}
这个方法来自WP大学(https://www.wpdaxue.com/add-a-security-question-to-the-register-screen.html),默认是只有2个问题,我们可以根据数组模式,添加或者修改多个问题。
这里我们可以看到在刷新注册页面可以看到问题的随机出现,我们可以自行设置多个问题随机。