为wordpress评论添加验证码

经常会有大量垃圾评论,删了又有了,关了评论功能又不合适。于是就想给评论加个验证码的功能,经过一番查找,找到了这段算数验证码的代码。我当前WordPress 5.4.4版本的,实现效果在评论时候可以看到,其他版本暂不知是否可用,代码仅供参考。

进行网站后台,先检查评论 (comments.php)代码是否采用了wordpress的默认评论表单函数comment_form(),如果是的话继续选择外观-主题编辑器,将下面代码复制到模板函数functions.php最下方,然后更新文件。

下面上代码,大家也可以试一下。

//为评论添加算数验证码
function my_fields($fields) {
	$num1=rand(0,50);
	$num2=rand(0,50);
	$base64Num1 = base64_encode($num1);
	$base64Num2 = base64_encode($num2);
	$myfuelds['sum'] = '<p class="comment-form-url"><label for="sum">验证码<span class="required"> *</span></label><input id="sum" name="sum" type="text" value="" size="30" maxlength="100" required="required" placeholder="' . $num1 . ' + ' . $num2 . ' = ?" /><input type="hidden" name="num1" value="' . $base64Num1 . '"><input type="hidden" name="num2" value="' . $base64Num2 . '"></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'];
	$num1 = $_POST['num1'];
	$num2 = $_POST['num2'];
	$base64Num1 = base64_decode($num1);
	$base64Num2 = base64_decode($num2);
    switch($sum){
        case $base64Num1+$base64Num2:
            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');

代码知识点如下:

红色*号可通过该样式实现

<span class="required"> *</span>

输入框占位符实现

placeholder="' . $num1 . ' + ' . $num2 . ' = ?"

base64编码和解码

base64_encode($num1);
base64_decode($num1);

代码加上了查看效果,再根据自己的主题再适当调整一些样式即可。

2020/12/25更新:经过这段时间的观察发现,自从增加了算数验证码后,垃圾评审真的少了很多,再也不用后台删评论了。^_^

尊重原创内容,转载请注明出处
本文链接地址: https://www.awnlab.com/archives/505

为您推荐

发表评论

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