wordpress新用户注册添加验证问题

最近越来越多使用wordpress建站的小伙伴给网站加上了用户中心功能,并且开放了网站注册,但是随之而来的就是大量的机器注册的垃圾用户,有些小伙伴非常机智的利用插件给注册单表加上了验证码,有些小伙伴则想给注册单表添加一个验证问答,其实小V个人也推荐使用验证问答,这样对于某些限制注册的网站非常适用,某些网站可能仅仅只开放给部分人群,则可以仅仅将答案告诉那部分人群即可,这样的效果验证码显然不能实现。先上一张效果图:

wordpress新用户注册添加验证问题-wordpress教程-代码笔记

将下面的代码添加到主题的 functions.php 即可:

add_action( 'register_form', 'add_security_question' );
function add_security_question() { ?>
    <p>
    <label><?php _e('请输入本站域名的中间部分:'v7v3') ?><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) {
    // 如果没有回答
    if (!isset($_POST[ 'user_proof' ]) || empty($_POST[ 'user_proof' ])) {
        return $errors->add( 'proofempty', '<strong>错误</strong>: 您还没有回答问题。'  );
    // 如果答案不正确
    } elseif ( strtolower( $_POST[ 'user_proof' ] ) != v7v3' ) {
        return $errors->add( 'prooffail', '<strong>错误</strong>: 您的回答不正确。'  );
    }
}

另外还可以添加多个随机问题,代码如下:

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>: 您的回答不正确。' );
    }
}

注:请编辑 14 和 16 行修改问题和答案,如果你修改了问题的数量,请记得修改第 6 行的 随机数返回范围 rand(0,1) ,比如 3 个问题,修改为 rand(0,2)。

wordpress新用户注册添加验证问题》上有8条评论

      1. Prebeta

        我用的是3.91的,还有放到主题的 functions.php下的,以前那些都是放到那里就没有问题,可能是版本的问题了

        回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注