纯代码实现屏蔽 WordPress 垃圾评论 跟 Spam 说再见
垃圾评论,如今可以说是无处不在,作为 WordPress 使用者的我们,防止垃圾评论的侵扰是必须要做的。而且垃…
垃圾评论,如今可以说是无处不在,作为 WordPress 使用者的我们,防止垃圾评论的侵扰是必须要做的。而且垃圾评论也就算了,居然还不访问我们的网站直接用脚本刷,连个 pv 值都不贡献下,太抠啦,不走心,差评。
在屏蔽垃圾评论方面,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 评论功能增加字数长度限制
WordPress 控制评论状态的钩子:pre_comment_approved
WordPress 如何有效拦截和过滤垃圾评论
友情提示:如果提示不含
err
这个函数,或评论后网页错位,就请将err
改为wp_die
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。
还没有任何评论,赶紧来占个楼吧!