由於個人博客小站的空間與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');