互联网每天都产生很多的垃圾信息、不良广告信息,WordPress网站如果开启了评论功能,也难免被这些不良信息困扰。如果网站设置了评论后邮件提醒,则会让管理员烦不胜烦。今天,我给大家分享介绍如何最省事的使用纯代码实现自动过滤大多数垃圾评论的方法。
垃圾评论的特征
- 评论内容含有
<a>
链接 - 通过程序自动发送
- 部分境外垃圾信息不包含中文汉字
垃圾评论示例
阻止垃圾评论的方法
1、使用Akismet Anti-Spam插件自动防护。这种做法是可行而且有效的,但缺点就是其免费密钥仅适用于个人非商业站点,而且API调用次数受到限制。最大的弊端是会影响网站性能。
2、使用插件或代码为评论增加验证功能,例如验证码或仅注册用户评论等。这种方式也是有效的,不过不太适合采用了静态缓存或CDN缓存的网站,虽然可以通过ajax的方式来解决缓存的问题,但ajax会产生额外系统资源损耗,访问量大的网站特别明显。(注:ajax会与服务器交换数据。)
3、推荐阻止垃圾评论的方式:纯代码阻止垃圾评论
//阻止垃圾评论代码
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');
以上代码将阻止内容中包含任何超级链接或没有中文的评论,并给出适当的提示,这和Akismet Anti-Spam插件不同的是,被阻止的评论是无法发送的(返回405错误提示),这不会对WordPress数据库造成影响。