为WordPress添加评论验证码和屏蔽纯英文评论

最近JV每天都能看到垃圾评论,纯英文还附带网址,现在每天几条虽然不多,但以后很难说。

每次都要到后台删也是很麻烦的,又不喜欢装插件,索性就加个验证吧。

首先是全英文的评论一概不允许通过,

添加方法——打开主题的模板文件 functions.php 在最后一个 ?>之前添加以下代码:

//屏蔽纯英文评论和纯日文
function inlojv_comment_post( $incoming_comment ) {
$pattern = '/[一-龥]/u';
// 禁止全英文评论
if(!preg_match($pattern, $incoming_comment['comment_content'])) {
wp_die( "您的评论中必须包含汉字!" );
}
$pattern = '/[あ-んア-ン]/u';
// 禁止日文评论
if(preg_match($pattern, $incoming_comment['comment_content'])) {
wp_die( "评论禁止包含日文!" );
}
return( $incoming_comment );
}
add_filter('preprocess_comment', 'inlojv_comment_post');

添加完毕之后保存即可!$pattern的值是正则表达式,前者是汉字编码范围,后者是日文编码范围,也就是评论必须包含中文,并且不能包含日文,否则拒绝提交。

——————————————————————————————————————————————————

其次就是算术验证码了,虽说添加验证码会导致用户体验不太好,但是没办法,
为了不让体验太差,不用四位数验证而使用的是算术验证。
添加方法——也一样打开主题的模板文件 functions.php 在最后一个 ?>之前添加以下代码:

//评论算术验证码///////////////////////////////
function jv_comment_protection(){
//随机获取范围0~9的两个自然数
$num1=rand(0,9);
$num2=rand(0,9);
echo"<div class='row'>"
."<label for='math' class='small'>验证码:</label>"
."$num1 + $num2 = <input type='text' name='sum' class='math_textfield' value=" tabindex='1' size='5'>"
."<input type='hidden' name='num1' value='$num1'>"
."<input type='hidden' name='num2' value='$num2'>"
."<label for='math' class='small'>请输入两数之和(必填)</label>"
."</div>";
}
function jv_comment_protection_pre($commentdata){
$sum=$_POST['sum'];//用户提交的计算结果
switch($sum){
//得到正确的计算结果则直接跳出
case $_POST['num1']+$_POST['num2']:break;
//未填写结果时提示错误
case null:err('出错了!请填写计算结果.');break;
//计算错误时的错误讯息
default:err('出错了!你算错了哦,再试一遍吧?!');
}
return $commentdata;
}
if(!is_user_logged_in() && $comment_data['comment_type']==''){
add_filter('preprocess_comment','jv_comment_protection_pre');
}

把代码放在类似“发表评论”的div之前,具体看你主题评论位置的布局,

一般情况下都能找到类似 <input name=”submit” type=”submit” id=”submit”/> 的提交文本框,

然后把代码放在<input之前就行了! 最后效果如下图:
为WordPress添加评论验证码和屏蔽全英文评论



微信扫描下方的二维码阅读本文

赞(0)