前言
我是发现了只要是使用WordPress建站的朋友,都反应有垃圾评论,似乎WordPress和垃圾评论是一对“孪生兄弟”只要有WordPress的地方垃圾评论都会在,无论在国内还是国外搭建的Wordpress网站,无论你权重高低无论你流量多少,垃圾评论都会自动找上门来!
WordPress垃圾评论数量多容易掩盖正常的读者评论,批量删除垃圾评论又容易造成误删,如果垃圾评论发布机器持续不断地向网站提交评论请求,频率足够高的话则足以演变成一种网站攻击,配置差一些的网站虚拟主机或轻量应用服务器很有可能因此而运行缓慢,严重者造成服务器宕机,导致正常用户无法访问。
所以今天这里给大家整理撰写几种阻止垃圾评论的方法,首先是WordPress自带了一些简单的防止垃圾评论的设置,如果能够充分利用好这些功能,就能从Wordpress程序本身达到一定的反垃圾评论效果了。
第一种WordPress自带阻止方法
如下图勾选上用户必须注册并登录才可以发表评论
还可以把如下图的也勾选上
优缺点讲解
1、开启“只有注册并登录才能发表评论”功能不建议开启,具众多博主站长反应这也会导致正常用户热情下降,具少量站长博主反应开启这个会有更多注册用户的增加。
2、开启“评论者先前须有评论通过了审核”这项,对反垃圾评论很帮助,建议开启,但是老用户如果换了邮箱则又会被当成新用户,评论仍需审核。
第二种插件法
市面上有很多阻止垃圾评论的插件,有很多都很优秀,这里就随便找一款吧,这个具体用谁的,看你自己的喜好了。
下面要介绍的是NoSpamNX插件,插件下载地址:https://wordpress.org/plugins/nospamnx/
NoSpamNX的原理是将评论框的名称属性改成了随机数,并添加一个新的隐藏的评论框,机器人发评论时会把隐藏的评论框也填满数据,而人工评论不会是这样。插件根据此特征从而阻止过滤掉机器人的垃圾评论。
纯代码法
将如下代码添加到WordPress主题目录里的function.php中即可
// 垃圾评论拦截 https://www.jlii.net
class anti_spam {
function anti_spam() {
if ( !current_user_can('level_0') ) {
add_action('template_redirect', array($this, 'w_tb'), 1);
add_action('init', array($this, 'gate'), 1);
add_action('preprocess_comment', array($this, 'sink'), 1);
}
}
function w_tb() {
if ( is_singular() ) {
ob_start(create_function('$input','return preg_replace("#textarea(.*?)name=([\"\'])comment([\"\'])(.+)/textarea>#",
"textarea$1name=$2w$3$4/textarea><textarea name=\"comment\" cols=\"100%\" rows=\"4\" style=\"display:none\"></textarea>",$input);') );
}
}
function gate() {
if ( !empty($_POST['w']) && empty($_POST['comment']) ) {
$_POST['comment'] = $_POST['w'];
} else {
$request = $_SERVER['REQUEST_URI'];
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '隐瞒';
$IP = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] . ' (透过D理)' : $_SERVER["REMOTE_ADDR"];
$way = isset($_POST['w']) ? '手动操作' : '未经评论表格';
$spamcom = isset($_POST['comment']) ? $_POST['comment'] : null;
$_POST['spam_confirmed'] = "请求: ". $request. "\n来路: ". $referer. "\nIP: ". $IP. "\n方式: ". $way. "\n內容: ". $spamcom. "\n -- 记录成功 --";
}
}
function sink( $comment ) {
if ( !empty($_POST['spam_confirmed']) ) {
if ( in_array( $comment['comment_type'], array('pingback', 'trackback') ) ) return $comment;
//方法一: 直接挡掉, 將 die(); 前面两斜线刪除即可.
die();
//方法二: 标记为 spam, 留在资料库检查是否误判.
//add_filter('pre_comment_approved', create_function('', 'return "spam";'));
//$comment['comment_content'] = "[ 判断这是 Spam! ]\n". $_POST['spam_confirmed'];
}
return $comment;
}
}
$anti_spam = new anti_spam();
下面再分享一种方法在评论区的地方增加一个数字验证码如下图这样
由于我是dux主题,请自觉根据自己的主题进行修改,首先将如下代码添加到WordPress主题目录下的function.php中
//dux主题在评论区添加数字验证码功能 https://www.jlii.net
function loper_protection_math(){
# 数字加法两个随机数, 范围0~99
$num1=rand(0,9);
$num2=rand(0,9);
echo "<input type=\"text\" name=\"sum\" class=\"text\" value=\"\" size=\"25\" tabindex=\"4\" placeholder=\"$num1 + $num2 = ?\" >\n";
echo "<input type=\"hidden\" name=\"num1\" value=\"$num1\">\n";
echo "<input type=\"hidden\" name=\"num2\" value=\"$num2\">";
echo "<label for=\"math\">请输入(计算结果)</label>\n";
}
function loper_protection_pre($commentdata){
$sum=$_POST['sum'];
switch($sum){
case $_POST['num1']+$_POST['num2']:
break;case null:err('错误: 请输入验证码。');
break;default:err('错误: 验证码错误。');}
return $commentdata;}
if($comment_data['comment_type']==''){
add_filter('preprocess_comment','loper_protection_pre');}
然后在找到主题目录下的comments.php,在下图如下代码段下面添加代码
<?php loper_protection_math();?>