相信很多人都意识到:独立博客经营到一段时间,pv等流量是上去了,但接踵而来的是无休止的垃圾评论。
而且垃圾评论也就算了,居然还不访问我们的网站直接用脚本刷,连个pv值都不贡献下,太抠啦,不走心,差评。
辣么,分享个教程呗,只要入了我们后台评论黑名单的关键词、email、url、ip,统统将他们一网拦截在前端门外。
实现代码
将以下代码扔到我们的主题的函数文件(如functions.php)
//屏蔽关键词,email,url,ip
function Shield_fuckspam($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', 'Shield_fuckspam');
如此,我们至少可以舒心很多啦,因为很多垃圾评论的人大多不走心,如果他们走心了,花点心思来诚心评论,不正说明了我们的代码起作用啦!
其他代码
接下来再分享几段实用的小代码,配合使用也是能够起到拦截垃圾评论的作用,以下代码同样扔到函数文件即可(如functions.php 我多实在的人啊,每次都要提醒是哪个常用的函数文件):
1.过滤外文评论
function 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(__('原谅庭主吧,这货只听得懂岛国神片的一两句雅蠛蝶 Japanese Get out!日本语出て行け! You should type some Chinese word!'));
}
return ($comment_data);
}
add_filter('preprocess_comment', 'refused_spam_comments');
2.屏蔽长连接评论
function lang_url_spamcheck($approved, $commentdata) {
return (strlen($commentdata['comment_author_url']) > 50) ?
'spam' : $approved;
}
add_filter('pre_comment_approved', 'lang_url_spamcheck', 99, 2);
3.屏蔽昵称,评论内容带链接的评论
function Shield_link($comment_data) {
$links = '/http:\/\/|https:\/\/|www\./u';
if (preg_match($links, $comment_data['comment_author']) || preg_match($links, $comment_data['comment_content'])) {
err(__('别啊,昵称和评论里面添加链接会怀孕的哟!!'));
}
return ($comment_data);
}
add_filter('preprocess_comment', 'Shield_link');
Ps:以上三段代码,最后两条选其一就行了,部分功能重复了,因为屏蔽了长链接自然也屏蔽了评论内容带链接的评论。
4.限制评论字数
function limit_comment_length( $commentdata ) {
$minCommentlength = 5; //最少字数限制
$maxCommentlength = 200; //最多字数限制
$pointCommentlength = mb_strlen($commentdata['comment_content'],'UTF8'); //mb_strlen 1个中文字符当作1个长度
if ( $pointCommentlength < $minCommentlength ){
header("Content-type: text/html; charset=utf-8");
err('抱歉,您的评论太短了,请至少输入' . $minCommentlength .'个字(已输入'. $pointCommentlength .'个字)');
exit;
}
if ( $pointCommentlength > $maxCommentlength ){
header("Content-type: text/html; charset=utf-8");
err('抱歉,您的评论太长了,请少于' . $maxCommentlength .'个字(已输入'. $pointCommentlength .'个字)');
exit;
}
return $commentdata;
}
add_filter( 'preprocess_comment', 'limit_comment_length' );
今天(20161013)看到boke112导航补充了限制评论字数的代码,觉得十分有利于防止纯表情或者不走心的评论,于是就补上了这段小代码,顺便优化一下代码(改为wp_die为err)。
总结
唉,垃圾评论这种东西是杜绝不了的,只能适当防御。
以上的代码是我最喜欢的几段代码之一,因为早上古今兄在群里提及垃圾评论的对付方法,所以我就分享一下教程,毕竟好的代码要广而告之,只有这样才会有更好、更实用的代码诞生。
WordPress要多折腾才会好玩,这样能够保持我们的激情!
补充(20161013)
以下补充不仅限本文教程须知,属于通用Q&A(前提:往主题函数文件functions.php添加代码时出现了状况):
- 加入代码后刷新网站。发现前端、后台打不开/空白,说明函数文件定义了相同的函数(一般来说,是已经集合了该功能,解决方法:不用加该段代码或者修改该函数为其他);
- 加入代码后测试功能是否有效时,出现网站框架错位(居中显示),说明使用的主题自定义了报错输出的函数(一般来说,是err取代wp_die,解决方法:将代码的里面的wp_die改为err,如果还无效,说明不是err这个函数,请自行寻找。)
- 加入代码后测试功能是否有效时,出现网站输出一串英文报错(例如:Fatal error: Uncaught Error: Call to undefined function err() in),说明使用的主题没有自定义报错输出函数err(解决方法:将代码里面的err改回Wordpress自带的报错函数wp_die。)
该文章还没有任何评论,你来说两句吧.
莫慌,小狮子正在努力加载评论...