2种适合WordPress注册验证码插件/非插件实现方法

老蒋在"分享一个WordPress邀请码注册插件 - Easy Invitation Codes"文章中有提到一旦开放注册账户功能,势必我们就应该考虑是否有垃圾注册信息的问题,这个与我们文章评论验证过滤还是有一定的关系的。所以,顺带的就引申出关于注册账户的时候,验证码插件或者实现方法问题。

关于注册账户的时候,我们依旧可以实现多种验证过滤模式,比如我们常见的有滑动移动滚动条模式、选择物件种类模式、拖动拼图模式,以及完成验证问题的模式。在这篇文章中,老蒋先分享一个使用插件,一种不适用插件自定义问题回答模式。

第一、SI CAPTCHA Anti-Spam插件

SI CAPTCHA Anti-Spam插件功能还是蛮强大的,支持文章评论、注册验证多种模式。安装之后,我们需要设置才可以生效。

SI CAPTCHA Anti-Spam插件

看到了不?支持的地方很多吧,包括登录的时候都可以激活验证模式。

2种适合WordPress注册验证码插件/非插件实现方法

第二、自定义验证问题验证方式

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个问题,我们可以根据数组模式,添加或者修改多个问题。

自定义验证问题验证方式

这里我们可以看到在刷新注册页面可以看到问题的随机出现,我们可以自行设置多个问题随机。

本文出处:老蒋部落 » 2种适合WordPress注册验证码插件/非插件实现方法 | 欢迎分享( 公众号:老蒋朋友圈 )

公众号 「老蒋朋友圈」获取站长新知 / 加QQ群 【1012423279】获取商家优惠推送