为Aksimet添加一个白名单(Whitelist)

可岛可薇同学在偶Blog留言很不顺利;几乎每次都被Aksimet判定为Spam …

对于偶们这些使用国外空间的Wordpresser, Aksimet是最佳的垃圾评论拦截工具,由于是国外虚拟主机,Aksimet可以连接到服务器(不会受到GFW阻碍),Spam识别率很高.(偶Blog自去年3月创建共拦截了1500个Spam)

Aksimet不得不用,但索可岛可薇同学无法留言问题又必须解决.我考虑为Aksimet添加一个白名单(Whitelist).研究了一下,如下

WordPress后台插件编辑器,打开Aksimet插件目录下akismet.php文件.

首先在php文件最上面创建一个白名单:

$comments_mail_whitelist = array(“[email protected]”,”[email protected]”);

为了省事,创建一个数组而已. 存储评论者的Email

看一下这个php文件,关键这句:

add_action(‘preprocess_comment’, ‘akismet_auto_check_comment’, 1);

添加了一个preprocess_comment的钩子,用于提交评论时进行审核.

遂定位到 akismet_auto_check_comment 函数


function akismet_auto_check_comment( $comment ) {

$comment[‘user_ip’] = preg_replace( ‘/[^0-9., ]/’, ”, $_SERVER[‘REMOTE_ADDR’] );
$comment[‘user_agent’] = $_SERVER[‘HTTP_USER_AGENT’];
$comment[‘referrer’] = $_SERVER[‘HTTP_REFERER’];
$comment[‘blog’] = get_option(‘home’);

$ignore = array( ‘HTTP_COOKIE’ );

foreach ( $_SERVER as $key => $value )
if ( !in_array( $key, $ignore ) )
$comment[“$key”] = $value;

$query_string = ”;
foreach ( $comment as $key => $data )
$query_string .= $key . ‘=’ . urlencode( stripslashes($data) ) . ‘&’;

$response = akismet_http_post($query_string, $akismet_api_host, ‘/1.1/comment-check’, $akismet_api_port);
if ( ‘true’ == $response[1] ) {
add_filter(‘pre_comment_approved’, create_function(‘$a’, ‘return \’spam\’;’));
update_option( ‘akismet_spam_count’, get_option(‘akismet_spam_count’) + 1 );

do_action( ‘akismet_spam_caught’ );

$post = get_post( $comment[‘comment_post_ID’] );
$last_updated = strtotime( $post->post_modified_gmt );
$diff = time() – $last_updated;
$diff = $diff / 86400;

if ( $post->post_type == ‘post’ && $diff > 30 && get_option( ‘akismet_discard_month’ ) == ‘true’ )
die;
}
akismet_delete_old();
return $comment;
}

还好.能看懂. $comment是 wordpress API提供的参数数组,这个函数把这个数组每个键/值组合成字符串,发送到Aksimet服务器,根据返回的结果判断是否Spam.偶们要修改的,就索加入一个If判断 ,只有当留言者的Email不在白名单时,才提交信息Aksimet服务器,否则,直接跳过.

先在函数最上方加上
global $comments_mail_whitelist;

在调用akismet_http_post之前加上:
if(!in_array(strtolower($comment[‘comment_author_email’]),$comments_mail_whitelist) ) {

最后在调用akismet_delete_old()函数前面加上 } 即可

完工.保存.
测试一下,应该可以了

8 Responses to “为Aksimet添加一个白名单(Whitelist)”


  • 我来沙发测试一下,不过我刚在你的另外一篇日志上留言,仍旧TIME OUT,所以我估计不仅是spam的问题,因为每次都超时。。。。

  • 有个朋友也老是被我的博客误判。。。最怕升级又没了  

  • 不懂小野大神是啥意思.

  • 咦,难得有人对偶名字有兴趣 ^ _ ^

    关于 小野大神 嘛

    首先,这个不索偶真名(废话,大家都知道)
    是偶以前胡乱想出来的昵称,现在偶网络上ID基本都是这个

    小野是姓,之所以叫小野是因为偶当年学日语,新版标准日本语初级上册第一课出场的第一个日本人叫“小野绿” ,所以小野是偶认识(会拼写)的第一个日本姓氏。所以偶就用这个姓啦=V=

    大神是名字。貌似在日语中大神(oogami或ookami)也是姓氏(Ex:大神一郎)。不过偶觉得这个姓氏很酷所以拿来当名字用=V=

    所以偶就叫小野大神啦=V=
    偶自己觉得这个名字还蛮不错滴。。。

    PS: 偶这个Blog目前百度搜索“小野”关键词排名第一。 百度,Google搜索”大神“ 排名第一页 =V=

  • 还是看不懂。。。到底要加哪些代码?

  • 用的不是WP,所以也没有这样的问题,而且稀有的访问量Spam都稀有,呵呵!

  • 嘛,平时基本上大部分时候脾气都比较好,只是如果牵涉到政治的话=_=|||||||||||||||||||毕竟偶也是对河蟹的社会感到非常不爽的类型=_=|||||||||||||||||
    现在还在犹豫要不要就这样废掉百度的博客——唯一的问题仅仅是博客上的好友,仅此而已;反正如果真的要换博客的话,偶早就在很多地方都有备用的,比如很早以前baidu服务器抽搐的时候就申请过blogspot的,在ninjatools上也有一个,当然还有一个现在的汉化站;另外现在相对经济上比较自立,就是大不了自己掏钱弄一个收费空间也不是什么困难的问题就是了=v=
    就是对动态网页基本完全不知道,只会纯静态的html网页。。。。。。。。。。。。。

  • 我最近也经常被误判,郁闷

Comments are currently closed.