让spam下地狱吧!
侧边栏壁纸
  • 累计撰写 936 篇文章
  • 累计收到 9,433 条评论
那年今日 · 11月6日

让spam下地狱吧!

秦大叔
2010-03-30 / 0 评论 / 361 阅读

  自从禁用了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.

评论

博主关闭了当前页面的评论