昨天发现了一件很蛋疼的事情呀,比如你在百度搜索WordPress新用户注册添加验证问题,出来的前三个代码都是有问题的,还有一个的代码居然只有前面几句,WP界的人都是这么浮躁的么?
本文要修正的功能是当站点启用注册后,给注册表单添加一个验证问答,避免一些垃圾用户,也可以利用这个来实现邀请注册功能,好处是不用安装什么邀请码插件,只需设置成统一的验证答案,然后把你设置的答案发给那些注册的人就行了。
修正后的代码为:
add_action( 'register_form', 'add_security_question' ); function add_security_question() { > <p> <label><?php _e('请输入本站域名的中间部分:dedewp') ><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' ] ) != 'dedewp' ) { return $errors->add( 'prooffail', '<strong>错误</strong>: 您的回答不正确。' ); } }
加入到主题的functions.php文件就可以正常使用了。
如果你需要随机多个问题,那么需要用到如下代码:
session_start(); function rand_reg_question(){ $register_number=rand(0,2); // 设置随机数的返回范围 $_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('北京','美国','wordpress'); 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>: 您的回答不正确。' ); } }