如上图,wordpress 默认会给管理员发送新用户注册和修改密码的邮件提醒,人性化的时代,我不懂为什么wordpress一直不将这个功能改成可设置项,网上关于这个问题的解决方案是修改wordpress框架代码,去掉发送邮件的代码,我是坚决不改wordpress框架代码的,而且更新一次改一次,不麻烦么?
我一个小站都受不了每天这样的邮件提醒,我不知道那些大战是如何解决的,我可以肯定每天收到的新用户注册均为机器人注册,根本不是真实用户,那么注册毫无意义,因此今天抽空想了个笨办法解决这个问题.
思路:
- 像这种每天垃圾注册用户,都是机器人,是有人用软件批量扫描wordpress网站批量注册的.
- 如上图,我博客是有注册和登陆验证码的,然而并没有什么卵用,那么只有2种可能,一种是通过WP我不知道的接口无视验证码注册,第二种可能是人家软件自带验证码试别功能,给我试别了验证码.
- 基于上诉情况,我决定在给注册加一层验证码机制,2种验证码同时存在的情况下,能直接杜绝掉软件批量注册的可能,虽然如果想,还是可以批量注册,但是它那个软件肯定是批量的,因此不会特殊对待因为我而把软件改成双验证码,所以这个想法是可行的,除非,真的是利用wordpress 我不知道的无视验证码的注册接口批量注册.....不管如何,先试验一段时间效果.那么让我们开始把.
实现代码步骤:
我目前已经有一个图片验证码了,所以只需要在加一个验证码就行:
//WordPress新用户注册随机数学验证码 function add_security_question_fields() { //获取两个随机数, 范围0~9 $num1=rand(0,10); $num2=rand(0,10); //最终网页中的具体内容 echo "<p><label for='math' class='small'>真人识别:$num1 + $num2 = ? </label><input type='text' name='sum' class='input' value='' size='25'>" ."<input type='hidden' name='num1' value='$num1'>" ."<input type='hidden' name='num2' value='$num2'></p>"; } add_action('register_form','add_security_question_fields'); add_action( 'register_post', 'add_security_question_validate', 10, 3 ); function add_security_question_validate( $sanitized_user_login, $user_email, $errors) { $sum=$_POST['sum'];//用户提交的计算结果 switch($sum){ //得到正确的计算结果则直接跳出 case $_POST['num1']+$_POST['num2']:break; //未填写结果时的错误讯息 case null:wp_die('<script>alert("错误:请输入真人识别结果!");window.history.go(-1);</script>');break; //计算错误时的错误讯息 default:wp_die('<script>alert("错误:真人识别结果错误,请重试!");window.history.go(-1);</script>');} } add_action( 'add_security_question','register_form' );
将上面的代码添加到主题的 functions.php 文件末尾处即可.
效果图:
本文作者为Mr.Wu,转载请注明,尊守博主劳动成果!
由于经常折腾代码,可能会导致个别文章内容显示错位或者别的 BUG 影响阅读; 如发现请在该文章下留言告知于我,thank you !