为wordpress 5.1 评论加上简单算术题防机器人垃圾评论

这个需求其实还是因为垃圾评论日益猖獗,为了保证速度,内心拒绝多装一个验证插件,所以就撸码吧,加了一个简单的算术,基本上机器人评论就发不了评论了,效果见本站文章评论,使用的是wordpress 5.0 +版本,早期版本不知道代码是否一样,代码仅供参考。

wordpress评论加算术

查看自己的主题,大部分主题在comments.php使用了默认的评论表单函数comment_form()来生成表单,我们需要在这里面添加一行用来让用户输入计算结果用于验证。

添加下面代码到function.php中:

//评论添加验证码
function my_fields($fields) {
    $num1=rand(0,9);
    $num2=rand(0,9);
    $myfuelds['sum'] = '<p class="comment-form-sum">
        <label for="sum"><i>' . $num1 . ' + ' . $num2 . ' = ?</i></label>
        <input id="sum" name="sum" type="text" value="" size="30" required="required" />
        <input type="hidden" name="num1" value="' . $num1 . '">
        <input type="hidden" name="num2" value="' . $num2 . '">
        </p>';
    array_splice($fields, 3, 0, $myfuelds);
    return $fields;
}
add_filter('comment_form_default_fields','my_fields');

function spam_protection_pre($commentdata){
    $sum=$_POST['sum'];
    switch($sum){
        case $_POST['num1']+$_POST['num2']:
            break;
        case null:
            wp_die('对不起: 请输入验证码。<a href="javascript:history.back(-1)">返回上一页</a>','评论失败');
            break;
        default:
            wp_die('对不起: 验证码错误,请<a href="javascript:history.back(-1)">返回</a>重试。','评论失败');
    }
    return $commentdata;
}
add_filter('preprocess_comment','spam_protection_pre');

这里面可能需要根据主题调整一些html代码的class并修改样式以保证新增输入框样式和其他的输入框保持一致,另外在这一句代码中:

array_splice($fields, 3, 0, $myfuelds);

决定了新添加的输入框位于所有输入框中的索引(index)位置,调整数字3可以将它调整到想要的位置。

阿里云服务器2折起,低至293/年

发表评论

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