為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()函數前面加上 } 即可

完工.保存.
測試一下,應該可以了

9 Replies to “為Aksimet添加一個白名單(Whitelist)”

  1. 我來沙發測試一下,不過我剛在你的另外一篇日誌上留言,仍舊TIME OUT,所以我估計不僅是spam的問題,因為每次都超時。。。。

  2. 咦,難得有人對偶名字有興趣 ^ _ ^

    關於 小野大神 嘛

    首先,這個不索偶真名(廢話,大家都知道)
    是偶以前胡亂想出來的昵稱,現在偶網絡上ID基本都是這個

    小野是姓,之所以叫小野是因為偶當年學日語,新版標準日本語初級上冊第一課出場的第一個日本人叫「小野綠」 ,所以小野是偶認識(會拼寫)的第一個日本姓氏。所以偶就用這個姓啦=V=

    大神是名字。貌似在日語中大神(oogami或ookami)也是姓氏(Ex:大神一郎)。不過偶覺得這個姓氏很酷所以拿來當名字用=V=

    所以偶就叫小野大神啦=V=
    偶自己覺得這個名字還蠻不錯滴。。。

    PS: 偶這個Blog目前百度搜索「小野」關鍵詞排名第一。 百度,Google搜索」大神「 排名第一頁 =V=

  3. 嘛,平時基本上大部分時候脾氣都比較好,只是如果牽涉到政治的話=_=|||||||||||||||||||畢竟偶也是對河蟹的社會感到非常不爽的類型=_=|||||||||||||||||
    現在還在猶豫要不要就這樣廢掉百度的博客——唯一的問題僅僅是博客上的好友,僅此而已;反正如果真的要換博客的話,偶早就在很多地方都有備用的,比如很早以前baidu服務器抽搐的時候就申請過blogspot的,在ninjatools上也有一個,當然還有一個現在的漢化站;另外現在相對經濟上比較自立,就是大不了自己掏錢弄一個收費空間也不是什麼困難的問題就是了=v=
    就是對動態網頁基本完全不知道,只會純靜態的html網頁。。。。。。。。。。。。。

  4. Pingback: Blowjob.

Comments are closed.