有朋自远方来,不亦乐乎。
纯代码实现屏蔽垃圾评论
原创 龙砚庭  发布于 2年前 ( 2016-10-11 ) 阅读: 1,131 次 抢沙发 A+

相信很多人都意识到:独立博客经营到一段时间,pv等流量是上去了,但接踵而来的是无休止的垃圾

而且垃圾评论也就算了,居然还不访问我们的网站直接用脚本刷,连个pv值都不贡献下,太抠啦,不走心,差评。

辣么,分享个教程呗,只要入了我们后台评论黑名单的关键词、email、url、ip,统统将他们一网拦截在前端门外。

实现代码

将以下代码扔到我们的主题的函数文件(如functions.php)

//屏蔽关键词,email,url,ip
function Shield_fuck($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添加代码时出现了状况):

  1. 加入代码后刷新网站。发现前端、后台打不开/空白,说明函数文件定义了相同的函数(一般来说,是已经集合了该功能,解决方法:不用加该段代码或者修改该函数为其他);
  2. 加入代码后测试功能是否有效时,出现网站框架错位(居中显示),说明使用的主题自定义了报错输出的函数(一般来说,是err取代wp_die,解决方法:将代码的里面的wp_die改为err,如果还无效,说明不是err这个函数,请自行寻找。
  3. 加入代码后测试功能是否有效时,出现网站输出一串英文报错(例如:Fatal error: Uncaught Error: Call to undefined function err() in),说明使用的主题没有自定义报错输出函数err解决方法:将代码里面的err改回Wordpress自带的报错函数wp_die。
Principle Team
龙砚庭官方QQ群,做真正意义上的社群!
7人已关注

该文章还没有任何评论,你来说两句吧.

发表评论

莫慌,小狮子正在努力加载评论...