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

垃圾评论,如今可以说是无处不在,作为 WordPress 使用者的我们,防止垃圾评论的侵扰是必须要做的。而且垃…

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

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

.singlemiddle-banner{margin-left:auto;margin-right:auto;overflow: hidden;}

在屏蔽垃圾评论方面,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 为你的域名哦!

.singlemiddle-banner{margin-left:auto;margin-right:auto;overflow: hidden;}

另外,也可参考下这篇文章: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

类别:WordPress函数讲解

本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。

评论 (0)COMMENT

登录 账号发表你的看法,还没有账号?立即免费 注册