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

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


add_action( 'register_form', 'add_security_question' );
function add_security_question() { ?>
    <p>
    <label><?php _e('请输入本站完整域名:'www.floryu.com') ?><br />
        <input type="text" name="user_proof" id="user_proof" class="input" size="25" tabindex="20" /></label>
    </p>
add( 'proofempty', '错误: 您还没有回答问题。'  );
    // 如果答案不正确
    } elseif ( strtolower( $_POST[ 'user_proof' ] ) != 'www.floryu.com' ) {
        return $errors->add( 'prooffail', '错误: 您的回答不正确。'  );
    }
}

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


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('秦始皇是哪个朝代的君主?','共产党的理论基础是什?');
// 添加答案数组(与应)
$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>
add( 'proofempty', '错误: 您没回问。' );
    } elseif ( strtolower( $_POST[ 'user_proof' ] ) != $register_answers[$register_number] ) {
        return $errors->add( 'prooffail', '错误: 您的回答不正确。' );
    }
}

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

由 floryu 发布

喜欢折腾,喜欢分享,喜欢WordPress,提供WordPress主题、插件汉化,以及WordPress、DEDECMS建站。

发表回复