Willin Kan大师的Anti-Spam 小墙一直是wordpress上防垃圾评论(spam)的神器,并且只是需要添加代码,不用安装插件,便很是受欢迎,但随着willin kan大师离开wordpress界,小墙也再无人更新,有些版本的插件可能也会出现与小墙不适应的状况,出现这样或那样的问题,如:我最近碰到的,开启wp-super-cache 或者 Hyper cache等插件后,可能会导致文章评论框消失,无法评论,这个问题原因据网上说是因为小墙的版本,我采用的是最新的1.84版本,根据网上的说法,换回了1.8版本后暂时恢复正常,后期还是否会出现,还有待观察,这里把搜集到的小墙版本做个整合,以便不时之需。文章将分页:

<<小牆>> Anti-Spam v1.7

/* -----------------------------------------------
<<小牆>> Anti-Spam v1.7 by Willin Kan.
*/
//建立
class anti_spam {
function anti_spam() {
if (!current_user_can('level_0')) {
add_action('template_redirect',array($this,'w_tb'),1);
add_action('init',array($this,'gate'),1);
add_action('preprocess_comment',array($this,'sink'),1); } }
//設欄位
function w_tb() {
if (is_singular()) {
ob_start(create_function('$input','return preg_replace("#textarea(.*?)name=([\"\'])comment([\"\'])(.+)</textarea>#","textarea$1name=$2w$3$4</textarea>
<textarea name=\"comment\" cols=\"100%\" rows=\"8\" style=\"display:block;width:0;height:0;margin:0;padding:0;\"></textarea>",$input);'));
} }
//檢查
function gate() {
if (isset($_POST['w']) && !empty($_POST['w']) && empty($_POST['comment'])) {
$_POST['comment']= $_POST['w'];unset($_POST['w']);
} else {$_POST['spam_confirmed'] = 1;}
}
//處理
function sink($comment) {
if (isset($_POST['spam_confirmed']) && !empty($_POST['spam_confirmed'])) {
//方法一:直接擋掉, 將 die(); 前面兩斜線刪除即可.
//die();
//方法二:標記為spam, 留在資料庫檢查是否誤判.
add_filter('pre_comment_approved',create_function('','return "spam";'));
$is_ping = in_array($comment['comment_type'], array('pingback', 'trackback'));
if ($is_ping) {
$comment['comment_content'] = "◎ 這是 Pingback/Trackback, 小牆懷疑這可能是 Spam!\n" .$comment['comment_content'];
} else {
$comment['comment_content'] = "[ 小牆判斷這是Spam! ]\n" .$comment['comment_content'];
}}
return $comment;
}}
$anti_spam = new anti_spam();
// -- END ----------------------------------------