WordPress阻止垃圾評論

16

天津11选5走势图分析 www.lixcgb.com.cn 博客的后臺是啟用了Akismet并且所有留言設置了所有評論審核,即使這樣Mysql中的評論表依然在不停的被刷呀刷呀刷的,新的comments ID上百倍于有效數據,于是希望在Akismet之前做一下過濾,思路是用JS動態在表單中增加一個校驗串,評論提交到后臺處理的時候提前檢測一下這個校驗串就可以知道這條評論是不是從前臺手工提交的,然后也可以過濾一下明顯的垃圾評論,例如不包含中文漢字的評論。

在主題的functions.php文件中加入判斷的代碼

//垃圾評論校驗
function preprocess_comment_spam($commentdata){
  //管理員直接通過
  if (is_admin()) {
    return $commentdata;
  }
  //不包含英文拒絕
  if(!preg_match('/[一-龥]/u',$commentdata['comment_content'])){
    wp_die('錯誤:評論內容必須包含中文。');
  }
  //校驗碼錯誤拒絕
  if (!empty($_POST['comment_auth']) && $_POST['comment_auth'] == md5('E5X14f'.date("Y-/#/n"))) {
    return $commentdata;
  }else{
    wp_die('錯誤:您必須啟用Javascritp才能發表評論。');
  }
}
add_action('preprocess_comment', 'preprocess_comment_spam');

這里過濾掉了非中文的評論,并且檢查表單是否包含了comment_auth字段,如果是非IT博客也可以直接過濾掉//這類的關鍵字。

前臺的處理稍微麻煩些,首先必須確定已經引入jQuery和jQuery MD5插件,另外要找到評論表單的ID或class,這里以我的#commentform為例,在合適的位置中追加

       //comment_spam
      $("#commentform").submit(function () {
       if ($("input#comment_auth").length==0) {
         var auth_date = new Date();
         var auth_key = $.MD5("E5X14f"+auth_date.getFullYear()+"-/#/"+(auth_date.getMonth()+1));
         var auth = "<input id="comment_auth" name="comment_auth" type="hidden" value="&quot;+auth_key+&quot;" />";
         $(this).append(auth);
       };
      });

其實這里的E5X14f其實略顯多余了,小眾使用的情況下是不會有評論機去專門計算你的算法的。

一年多使用,完美的解決了垃圾評論的問題,評論機群發的消息一條也沒有收到了。

共 16 條評論

  1. 回復

    你今年多大了?程序員的未來在哪里?

  2. 回復

    不知道這個真的有用沒有

    • 回復

      評論機器人發布不出去的,因為隨機校驗碼是自己寫的,除非你的網站非常知名,否則沒有人專門為你的網站寫規則

  3. 回復

    剛看了一下, 你也還是用wp-comments-post.php, 請忽略.

  4. 回復

    我這垃圾評論也不少,什么多說、akismet,都防不住,評論還都是中文,說的有模有樣的。

    • 回復

      你可以試試我的方法,截至目前為止,除了人工發送的沒出現過垃圾評論,因為市面上的評論軟件都提交不了. (PS 我并不知道是不是有正常留言被刷掉. 應該沒有吧 呵呵)

  5. 回復

    我的akismet也是屏蔽了很多垃圾評論,我經常去清空就行吧,你這個是弄完了,就直接不接收那種評論了對吧

  6. 回復

    好像我的評論無法顯示啊

  7. 回復

    用多說之類的工具也可以啊

  8. 回復

    學習了,我也是垃圾評論爆滿,正在尋找有效方法解決····

  9. 回復

    呵呵,我說我評論都不見了,不過這個用戶體驗不好!非常不好!

  10. 回復

    [一-龥
    大神,第一段代碼里這個啥意思啊

    • 回復

      [1-9] [A-Z]分別表示1到9的數字,A到Z的字母,這個能理解吧,[一-龥]的意思就是從一到龥的字符,基本上包含了所有常用的中文漢字。

  11. 回復

    大神,請教一個問題
    你今年多大了?程序員的未來在哪里?

發表評論

您的郵箱不會公開,當您的評論有新的回復時,會通過您填寫的郵箱向您發送評論內容。 必填字段 *

為何看不到我發布的評論?

正在提交, 請稍候...