纯代码实现屏蔽 WordPress 垃圾评论 跟 Spam 说再见

2016-12-04 06:28 2,788 57 条评论 龙笑天下
Dragon主题购买

垃圾评论,如今可以说是无处不在,作为 WordPress 使用者的我们,防止垃圾评论的侵扰是必须要做的。而且垃圾评论也就算了,居然还不访问我们的网站直接用脚本刷,连个 pv 值都不贡献下,太抠啦,不走心,差评。

纯代码实现屏蔽 WordPress 垃圾评论 跟 Spam 说再见

在屏蔽垃圾评论方面,Akismet 插件还是很不错的,能起到一定的效果。但还是不够给力,接下来的教程就可以基本杜绝垃圾评论了。

本站Dragon 主题已经自带集成了此功能,一键开启即可食用。

方法 1:评论黑名单加强版(推荐)

wordpress 有个“评论黑名单”功能,这个功能在 wordpress 后台-“讨论”菜单里面,我非常喜欢这个功能。它的作用是:当评论的内容、评论者名称、URL、电子邮件或 IP 地址中包含其中任何关键字时,系统将自动将评论标记为“垃圾评论”。但有个不好的地方是评论者的评论还是能提交上来,你必须手动去清理这些“垃圾评论”...

下面的方法就是弥补这个缺陷的,当评论的内容、评论者名称、URL、电子邮件或 IP 地址中包含其中任何关键字时(当然,这些关键字需要你自己去设置好~),评论将不能提交!

将以下代码扔到我们的主题的 functions.php 中(来自 @龙砚庭

/**
 * 纯代码实现屏蔽 WordPress 垃圾评论
 * https://www.ilxtx.com/wordpress-automatically-refuse-spam-comments.html
 */
function lxtx_fuck_spam_comments($comment) {
    if (wp_blacklist_check($comment['comment_author'], $comment['comment_author_email'], $comment['comment_author_url'], $comment['comment_content'], $comment['comment_author_IP'], $comment['comment_agent'])) {
        header("Content-type: text/html; charset=utf-8");
        err(__('不好意思,您的评论违反了龙笑天下的评论规则!'));
    } else {
        return $comment;
    }
}
add_filter('preprocess_comment', 'lxtx_fuck_spam_comments');

效果:请在本页评论“婊子”试试~~

方法 2:评论中必须有中文

屏蔽纯英文或纯日文评论,评论中必须含有中文:

function lxtx_refused_spam_comments($comment_data) {
    $pattern = '/[一-龥]/u';
    $jpattern = '/[ぁ-ん]+|[ァ-ヴ]+/u';
    if (!preg_match($pattern, $comment_data['comment_content'])) {
        err(__('来一波汉字吧,苦逼的博主只认识汉字!You should type some Chinese word!'));
    }
    if (preg_match($jpattern, $comment_data['comment_content'])) {
        err(__('原谅博主吧,这货只听得懂岛国神片的一两句雅蠛蝶! You should type some Chinese word!'));
    }
    return ($comment_data);
}
add_filter('preprocess_comment', 'lxtx_refused_spam_comments');

方法 3:屏蔽昵称,评论内容带链接的评论

function lxtx_Shield_link($comment_data) {
    $links = '/http:\/\/|https:\/\/|www\.|\.com|\.cn|\.net|\.org/u';
    if (preg_match($links, $comment_data['comment_author']) || preg_match($links, $comment_data['comment_content'])) {
        err(__('别啊,昵称和评论里面添加链接会怀孕的哟!!'));
    }
    return ($comment_data);
}
add_filter('preprocess_comment', 'lxtx_Shield_link');

方法 4:屏蔽长链接评论

当评论者链接长度大于 50 个字符时,评论将被当作垃圾评论。

function lxtx_lang_url_spamcheck($approved, $commentdata) {
    return (strlen($commentdata['comment_author_url']) > 50) ?
    'spam' : $approved;
}
add_filter('pre_comment_approved', 'lxtx_lang_url_spamcheck', 99, 2);

方法 5:设置一个发送评论前需要勾选的选择框

我们通常使用的防机器人的方式是增加验证码,如:数字字母验证码、算术验证码等,在这里介绍的是添加一个发送评论前需要勾选的选择框,来判断是否人工。

首先,在你的评论模板页面的适当位置加入下面的代码,一般是在 comments.php 这个文件中。

<label for="enable"><input type="checkbox" name="enable" id="enable" onClick="apply()" class="enable_checkbox"> Check this box to enable the send button</label>

然后,引入下面的 JS 代码:

<script type="text/javascript">
function apply() {
var form_submit = document.commentform.submit;
var form_checkbox = document.commentform.enable;
form_submit.disabled=true;
if(form_checkbox.checked==true) {form_submit.disabled=false;}
if(form_checkbox.checked==false) {form_submit.enabled=false;}
}
</script>

摘自:《屏蔽垃圾评论的几种方案

方法 6:禁止不访问网站页面直接评论

很多机器人和恶意评论的人为什么可以不访问网站的任何页面,却能留下评论回复呢?Spam 的原理其实很简单:发表评论是由 wp-comments-post.php 文件执行完成的,只要机器人确定你的网站是 WordPress 搭建,通过软件直接读取网站根目录下的 wp-comments-post.php,并写入内容即可完成,无需访问网站的任何页面。

那么,怎么预防这种形式的垃圾评论呢?下面有 2 种方法。

① 通过修改.htaccess 文件判断评论来路是否是通过网站的页面读取 wp-comments-post.php 文件的,如果否则禁止写入。在.htacess 中加入以下代码:

# Protect from spam comments By ILXTX.COM
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post.php*
RewriteCond %{HTTP_REFERER} !.*ilxtx.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]

注:不要忘记替换 ilxtx.com 为你的域名哦!

另外,也可参考下这篇文章:WordPress 防垃圾评论

② 修改 wp-comments-post.php 文件的名字或移动该文件的位置。方法如下:

一,将 Wordpress 程序根目录的 wp-comments-post.php,随意修改一下名称比如改为:spam-post.php;

二,因为在发表评论时需要读取上面更名的文件,所以还而修改相关模板,分两种情况:

1、主题使用非标准评论表单函数

打开你当前主题的评论模板文件:例如:comments.php,查找:wp-comments-post.php 并改为:spam-post.php

2、主题使用标准评论表单函数

如果搜索评论模板 comments.php 中找不到 wp-comments-post.php,说明你的主题使用的是标准 WP 评论表单函数,那就需要打开 wordpress 程序 wp-includes 目录的 comment-template.php 文件,查找:wp-comments-post.php 并改为:spam-post.php

另外,也可以将 wp-comments-pos.php 文件移动到当前主题目录中,这里不再详述。

其它参考文章

WordPress 防止冒充博主昵称或邮箱留言-BG
WordPress 防止冒充博主昵称或邮箱留言

WordPress 防止冒充博主昵称或邮箱留言

WordPress 一直以来都有个问题, 如果博主设置评论不需要审核批准就能发表, 那么有可能被人冒名顶替管理员进行留言。大家应该都知道,Wordpress 留言显示的头像是通过留言者的 Em...
为 WordPress 评论功能增加字数长度限制-BG
为 WordPress 评论功能增加字数长度限制

为 WordPress 评论功能增加字数长度限制

很多读者在你的 WordPress 博客留言都是仅仅为了一个外链,所以他们很忙,随便发个“好文章”“顶一个”这样毫无意义的评论,虽然你可以手动删除他们,但是如果你的网站很受欢迎,删除评论也是很耗...
Wordpress 控制评论状态的钩子:pre_comment_approved-BG
Wordpress 控制评论状态的钩子:pre_comment_approved

Wordpress 控制评论状态的钩子:pre_comment_approved

昨天,群里提到了评论审核的相关规则,大家也知道我们所处的网络环境,我们网站的评论是不允许不和谐的评论的,否则后果很严重的!当然,我相信大部分站长都对各自的评论把关很严,有自己的评论控制方法,...

WordPress 如何有效拦截和过滤垃圾评论

友情提示:如果提示不含err这个函数,或评论后网页错位,就请将err改为wp_die

「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

2016-11-20

2016-12-18

发表评论

表情 格式 贴图 链接 私密 签到
Dragon主题购买阿里云特价云服务器1核2G低至86元,N4共享型服务器3年仅需799元腾讯云特价云服务器1核2G 88元/年 2核4G3M688元/3年,更有千元代金券礼包免费领!
评论
正在努力加载中...
扫一扫二维码分享
×
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept”, you consent to the use of ALL the cookies. Learn more