WP Anti Spam 非插件实现垃圾评论拦截

小墙的防spam的能力,可以说100%啊!Akismet有时候会“误杀”正常的评论,而且会浪费数据库,强烈推荐大家使用“小牆”

將下列代碼 copy 到模板的 functions.php

/* -----------------------------------------------
WP Anti-Spam v1.8 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&gt;<textarea style="_0display: none\&quot;;" name="\&quot;comment\&quot;" rows="\&quot;4\&quot;" cols="\&quot;100%\&quot;"></textarea>",$input);') );
}
}
//檢查
function gate() {
( !empty($_POST['w']) &amp;&amp; empty($_POST['comment']) ) ? $_POST['comment'] = $_POST['w'] : $_POST['spam_confirmed'] = 1;
}
//處理
function sink( $comment ) {
if ( !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') );
$comment['comment_content'] = ( $is_ping ) ?
"◎ 這是 Pingback/Trackback, 小牆懷疑這可能是 Spam!\n" . $comment['comment_content'] :
"[ 小牆判斷這是Spam! ]\n" . $comment['comment_content'];
}
return $comment;
}
}
$anti_spam = new anti_spam();
// -- END ----------------------------------------

作者:kan.willin。原文地址:http://kan.willin.org/?p=1267

发表评论