自从禁用了Akismet,spam们笑了……
幸亏老子及时找来Willin的WP ANTI SPAM 小墙 1.8,保得一方平安,有效维护了秦家大院的和谐气氛。
使用小墙半月有余,每日前来骚扰的spam通通进了垃圾评论,准确率令人咋舌。
小墙比Akismet好的地方是,基本没有误判,再不用去小黑屋里提人了;较之不足的地方是没法抵御人肉spam的进攻。
虽然几行代码的效果没法跟Akismet服务器上的黑名单相提并论,但简单的好处就是高速、高效,更不会导致发评论出现404的错误。
在我看来,人肉spam好歹给我的小站贡献了一个IP,只要不过分,咱也得饶人处且饶人了。要是你实在看不顺眼,就在WordPress后台添加黑名单好了。
那么,好东西就要卖力广而告之了。今天比较闲,就把Willin的代码给抄过来了。喜欢看原版的朋友,点此传送门吧(2017.08.17:http://willin.heliohost.org/?p=1267已失效),俺免费送你一程!
把以下代码复制到你正在使用的主题的functions.php文件中即可。(如果搞不清安放位置,就在<?php后另起一行,插入即可!)
/* ———————————————–
<<小牆>> 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>“,$input);’) );
} }
//檢查
function gate() {
( !empty($_POST[‘w’]) && 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 —————————————-
如果要节省点数据库空间,可以将最后一个 $comment[‘comment_content’]; 改成 substr($comment[‘comment_content’],0,50); 只截取50字.
“登陆者不验证” 功能 user_level 设为 0, 相关权限可以参考 Roles_and_Capabilities.