经常会有大量垃圾评论,删了又有了,关了评论功能又不合适。于是就想给评论加个验证码的功能,经过一番查找,找到了这段算数验证码的代码。我当前WordPress 5.8.2版本的,实现效果在评论时候可以看到,其他版本请自行尝试,代码仅供参考。
进行网站后台,先检查评论 (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');
//移除站点输入框
add_filter('comment_form_default_fields', 'mytheme_remove_url');
function mytheme_remove_url($arg) {
$arg['url'] = '';
return $arg;
}
代码知识点如下:
红色*号可通过该样式实现:
<span class="required"> *</span>
输入框占位符实现:
placeholder="' . $num1 . ' + ' . $num2 . ' = ?"
base64编码和解码:
base64_encode($num1);
base64_decode($num1);
代码加上了查看效果,再根据自己的主题再适当调整一些样式即可。