部落格小站的空間與 mysql 空間往往有限,共享伺服器資源也有限,所以垃圾評論一定要攔截在寫入資料庫之外。

更可氣的是看到空間的統計,很幾千的 IP 訪問,但基本上都是這個垃圾評論的 IP,所以實在不能忍

網上找了一些方法,主要有三個,如果將這三個一塊使用基本上就可以攔截絕大多數垃圾評論

一、使用 Akismet 外掛 (https://WordPress.org/plugins/akismet/),後臺申請一個免費的 key,可以攔截 99% 的垃圾評論,但是這個外掛還是會將垃圾評論寫入資料庫的,一會幾千條甚至上萬條垃圾評論,雖說可以設定 15 天后自動刪除,但是看著也彆扭,於是加上第二種方法。

二、更改 wp-comments-post.php 名稱

這種方法是先將 wp-comments-post.php 改為隨便的名字,然後在你主題檔案的 comments.php 中將 wp-comments-post.php 改為你剛才改過的名字

但是現在的 spam 機器人太強了,這種方法基本上沒有任何作用,垃圾評論還是會進入到後臺的垃圾評論裡,於是採取第三種方法,過濾掉純英語的垃圾評論,這種評論佔了垃圾評論的很大一部分

三、過濾純英文垃圾評論

在你主題的 functions.php 中新增以下程式碼

function refused_spam_comments( $comment_data ) {
$pattern = '/[一-龥]/u';
if(!preg_match($pattern,$comment_data['comment_content'])) {
wp_die('評論必須含中文!');
}
return( $comment_data );
}
add_filter('preprocess_comment','refused_spam_comments');

日文的採用同樣的方法,請幾個常出現的日文假名寫入到正規表示式中ッ、の、ン、優、業、グ、貿其中 [一-龥] 這個正規表示式代表所有中文,這時純英文的垃圾評論算是過濾掉了,但是還有另外一種垃圾評論,日文的……

function fuckjp_comment_post( $incoming_comment ) {
$http = '/[<|=|.|友|夜|KTV|ッ|の|ン|優|業|グ|貿|]/u';
if(preg_match($http, $incoming_comment['comment_content'])) {
wp_die( "日本廣告離開!" );
}
return( $incoming_comment );
}
add_filter('preprocess_comment', 'fuckjp_comment_post');