AI编程生活评测

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

编程笔记 / 2019-05-15 / 2 min
这个需求其实还是因为垃圾评论日益猖獗,为了保证速度,内心拒绝多装一个验证插件,所以就撸码吧,加了一个简单的算术,基本上机器人评论就发不了评论了,效果见本站文章评论,使用的是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 可以将它调整到想要的位置。
  1. shuihuo 2019-08-06 · 23:42

    谢谢分享,感谢提点

    1. 行星带 2019-09-04 · 10:06

      你用上了,哈哈