WordPress纯代码添加注册验证功能

WordPress带有用户评论、用户注册等功能,使用比较广泛,但有时会碰到机器人恶意注册,所以添加一些注册验证功能还是必要的。
纯代码添加注册验证功能,网上有很多分享,现在推荐几种较为好用的,都是通过编辑主题的functions.php文件实现的。

方法一:

add_action( 'register_form', 'add_security_question' );
function add_security_question() { ?>
    <p>
    <label><?php _e('请输入本站域名:lianghg.com') ?><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' ] ) != 'lianghg.com' ) {
        return $errors->add( 'prooffail', '<strong>错误</strong>: 您的回答不正确。'  );
    }
}

上面红色字体的信息,就是你要设定的注册时要验证的问题和答案,按需修改。
注册时效果:

不过,由于问题和答案都是固定的,如果被专门针对的话,也是防止不了机器人的。
因此,可以增多几个问题和答案,或者使用数字加法公式来进行验证。

方法二,多问题验证:

该资源需登录评论本文后刷新网页查看,如果没有账号,可以先进行注册


注册时,验证问题会随机出现,如图:


方法二貌似和最新版本的WordPress存在兼容性,在后台修改添加时,会出现无法保存的情况。

方法三,随机数字求和验证:

该资源需登录评论本文后刷新网页查看,如果没有账号,可以先进行注册


效果如下图:


以上三种方法选择其中一种即可,不可同时使用。
另外,有些邮箱在收到WordPress注册邮件时,点击邮件内的注册链接会提示失效,主要原因是链接后面的“>”被解析到了注册链接里面,删除链接前后的“<”“>”就行了。
有两个文件要修改:

该资源需登录评论本文后刷新网页查看,如果没有账号,可以先进行注册


这样修改之后,在注册或修改密码时,链接就不会出现失效的问题了。
要注意的是,如果更新了WordPress版本,记得重新再修改这两个文件。
在网上找到个不用修改以上两个文件的方法,就是在functions.php内添加以下信息,不过我测试了没效果,有兴趣的可以试试:

该资源登录后才可访问,如果没有账号,可以先进行注册


机器人注册问题现在是解决了,那要是人工进行垃圾注册的怎么处理?
首先判断哪种人工注册是垃圾注册,然后利用WordPress的wp-cron来进行自动删除垃圾账号。
一般正常的注册,注册完之后,短时间内都是会通过邮箱来激活用户名的,我们可以设定个时间,比如12个小时,超过12小时后还没有进行邮箱激活的,那么就判定为是垃圾注册,让系统自动删除这次注册账号。
先把访客触发wp-cron.php计划任务的功能禁用,否则会产生额外的负载。在wp-config.php中添加:

define('DISABLE_WP_CRON', true);

然后在functions.php内添加以下信息:

该资源需登录评论本文后刷新网页查看,如果没有账号,可以先进行注册


目前不清楚这个wp-cron多久就被WordPress调用一次,简单测试了一下,至少在1分钟内是有被调用的。
但为了防止没有及时被调用,可以用系统的crontab计划任务来执行wp-cron.php,添加以下计划任务,12小时执行一次:

0 0,12 * * * php -f /home/wwwroot/yourwebsite.com/wp-cron.php >/dev/null 2>&1

注意你的php路径和网站路径,按需修改。至此,在注册后12小时内未进行激活的用户,就会被系统自动删除了,此方法只适用于单站点WordPress,多站点WordPress不适用。

1 条评论 on “WordPress纯代码添加注册验证功能

发表评论