阻止WordPress垃圾评论 – 免插件教程 南昌鸿图建站公司

互联网每天都产生很多的垃圾信息、不良广告信息,WordPress网站如果开启了评论功能,也难免被这些不良信息困扰。如果是维护管理频率较高的网站,强烈建议在后台开启“评论必须经人工批准”。

不过这样一来会增加管理者的工作,本文将介绍如何有效自动过滤大多数垃圾评论的方法。

垃圾评论的特征

一般来说垃圾评论都是以超级链接或宣传某种不良信息为目的,大多有以下特点:

  • 评论内容含有<a>链接
  • 通过程序自动发送
  • 部分境外垃圾信息不包含中文汉字

垃圾评论示例:

WordPress垃圾评论示例

如何阻止垃圾评论

1、使用插件自动防护。这种做法是可行而且有效的,但缺点就是其免费密钥仅适用于个人非商业站点,而且API调用次数受到限制。最大的弊端是会影响网站性能。

2、使用插件或代码为评论增加验证功能,例如验证码或仅注册用户评论等。这种方式也是有效的,不过不太适合采用了静态缓存或CDN缓存的网站,虽然可以通过ajax的方式来解决缓存的问题,但ajax会产生额外系统资源损耗,访问量大的网站特别明显,不符合站长帮一贯追求极致优化的作风。(注:ajax会与服务器交换数据。)

3、推荐阻止垃圾评论的方式:纯代码免插件阻止垃圾评论

在当前主题的functions.php文件尾部增加以下代码:

/* 阻止垃圾评论代码Start */
/* 本文出自:https://www.zhanzhangb.com/1417.html */
/* 阻止全英文评论 */
function refused_english_spam_comments( $comment_data ) {
	$pattern = '/[一-龥]/u';
	$jpattern ='/[ぁ-ん]+|[ァ-ヴ]+/u';
	if(!preg_match($pattern,$comment_data['comment_content'])) {
		wp_die('<p>评论中必须含有中文! - 站长帮</p>');
	}
	return( $comment_data );
}
add_filter('preprocess_comment','refused_english_spam_comments');

/* 阻止含 A 链接评论 */
function refused_a_spam_comments( $incoming_comment ) {
	if(strstr($incoming_comment['comment_content'], "<a")){
		wp_die( "<p>评论中不能包含超级链接,请直接填写 URL 地址! - 站长帮</p>" );
	}
	return( $incoming_comment );
}
add_filter('preprocess_comment', 'refused_a_spam_comments');
/* 阻止垃圾评论代码End */

如果以上代码阻止垃圾评论,但不出现提示内容(部分主题的兼容性问题),请尝试以下代码:

/* 阻止垃圾评论代码Start */
/* 本文出自:https://www.zhanzhangb.com/1417.html */
function spam_comments_error_prompt($ErrMsg) {
	header('HTTP/1.1 405 Method Not Allowed');
	echo $ErrMsg;
	exit;
}
/* 阻止全英文评论 */
function refused_english_spam_comments( $comment_data ) {
	$pattern = '/[一-龥]/u';
	$jpattern ='/[ぁ-ん]+|[ァ-ヴ]+/u';
	if(!preg_match($pattern,$comment_data['comment_content'])) {
		spam_comments_error_prompt('评论中必须含有中文! - 站长帮');
	}
	return( $comment_data );
}
add_filter('preprocess_comment','refused_english_spam_comments');

/* 阻止含 A 链接评论 */
function refused_a_spam_comments( $incoming_comment ) {
	if(strstr($incoming_comment['comment_content'], "<a")){
		spam_comments_error_prompt( "评论中不能包含超级链接,请直接填写 URL 地址! - 站长帮" );
	}
	return( $incoming_comment );
}
add_filter('preprocess_comment', 'refused_a_spam_comments');
/* 阻止垃圾评论代码End */

以上代码将阻止内容中包含任何超级链接或内容全英文的评论,并给出适当的提示,这和Akismet Anti-Spam插件不同的是,被阻止的评论是无法发送的(返回405错误提示),这对于WordPress数据库来说也算是一种环保吧。

欢迎持续关注站长帮,我们共同探讨更多WordPress优化技巧,。