其實過濾特定關鍵詞垃圾評論很簡單,先我們定義一個關鍵詞文件,然后當用戶提示評論時我們遍歷關鍵詞文件進行strstr判斷即可實現了.
方法簡介:將以下代碼添加到WordPress博客主題的functions.php文件中,根據自己的需要修改 $ bad_comment_content 數組的內容,任何包含在$ bad_comment_content 數組內的字符都將會被自動拒絕留言!
代碼如下:
- //拒絕包含特定關鍵詞的垃圾評論
- function in_comment_post_like($string, $array) {
- foreach($array as $ref) { if(strstr($string, $ref)) { return true; } }
- return false;
- }
- function drop_bad_comments() {
- if (!emptyempty($_POST['comment'])) {
- $post_comment_content = $_POST['comment'];
- $lower_case_comment = strtolower($_POST['comment']);
- $bad_comment_content = array(
- '不要亂發',
- 'baidu.com',
- 'www.49028c.com',
- 'www.49028c.com',
- 'is'
- );
- if (in_comment_post_like($lower_case_comment, $bad_comment_content)) {
- $comment_box_text = wordwrap(trim($post_comment_content), 80, "n ", true);
- $txtdrop = fopen('/var/log/httpd/wp_post-logger/nullamatix.com-text-area_dropped.txt', 'a');
- fwrite($txtdrop, " --------------n [COMMENT] = " . $post_comment_content . "n --------------n");
- fwrite($txtdrop, " [SOURCE_IP] = " . $_SERVER['REMOTE_ADDR'] . " @ " . date("F j, Y, g:i a") . "n");
- fwrite($txtdrop, " [USERAGENT] = " . $_SERVER['HTTP_USER_AGENT'] . "n");
- fwrite($txtdrop, " [REFERER ] = " . $_SERVER['HTTP_REFERER'] . "n");
- fwrite($txtdrop, " [FILE_NAME] = " . $_SERVER['SCRIPT_NAME'] . " - [REQ_URI] = " . $_SERVER['REQUEST_URI'] . "n");
- fwrite($txtdrop, '--------------**********------------------'."n");
- header("HTTP/1.1 406 Not Acceptable");
- header("Status: 406 Not Acceptable");
- header("Connection: Close");
- wp_die( __('bang bang.') );
- }
- }
- }
- add_action('init', 'drop_bad_comments');
現在全英文的垃圾評論也不洗,我們可以限制一下.
剛一發我就扒過來了~~~~來自v7v3修改自知更鳥,一般的spammer都是外國人,第一次發布絕對是全英文,所以第一次可以擋住80%的垃圾評論!根據email來判斷是否為同一人,如果是,并且第一次沒有使用全英文評論,即可正常發言不受限制,再加上常見的敏感關鍵詞,多數的英文、日文評論都不在話下,放至主題文件中functions.php:
- function v7v3_en($comment) {
- $pattern = '/[一-?]/u';
- $cau=$comment['comment_author'] ;
- $cem=$comment['comment_author_email'] ;
- global $wpdb;
- $ok_to_comment = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_author = '$cau' AND comment_author_email = '$cem' and comment_approved = '1' LIMIT 1");
- if( is_user_logged_in() || 1 == $ok_to_comment ){ return $comment; }
- elseif ( !preg_match_all($pattern, $ccontent, $match) ) {
- exit('
- <head><meta http-equiv="Content-Type" content="text/html; charset=utf8"/></head>
- 初次評論不允許純英文哦~<a href="javascript:history.go(-1);">向上一頁</a>');
- }
- }
- add_filter('preprocess_comment', 'v7v3_en');
- function v7v3_comment_post( $incoming_comment ) {
- $http = '/[<|KTV|ッ|の|ン|??|?I|グ|?|]/u';
- if(preg_match($http, $incoming_comment['comment_content'])) {
- wp_die( "
- <head><meta http-equiv='Content-Type' content='text/html; charset=utf8'/></head>
- 您的評論包含敏感關鍵詞,被系統判斷為垃圾評論!<a href='javascript:history.go(-1);'>向上一頁</a>" );
- }
- return( $incoming_comment );
- }
- add_filter('preprocess_comment', 'v7v3_comment_post');
最后還可以使用wordpress評論黑名單功能
1、登陸Wordpress后臺→設置→討論→評論黑名單(內容可自行修改為合適自己博客的)到評論黑名單,點擊保存即可,代碼如下:
原理:垃圾站收集垃圾評論常見詞庫,出現此類詞匯的垃圾評論一律被Wordpress后臺直接消滅!
2、修改Wordpress主題functions.php文件[修改前注意備份文件]
注:本站使用comments-ajax.php處理提交,用err輸出錯誤信息,如果貴站沒有使用comments-ajax.php,那么請用wp_die輸出錯誤信息!
方法:將下面代碼中的err換成wp_die,否則會出現500錯誤,代碼如下:
- //評論外鏈數檢測
- function BYMT_spamlinks($comment) {
- $spamlinks = preg_match_all( '/<a [^>]*href/i', $comment['comment_content'], $out );
- if ($spamlinks>1){ //1為允許的鏈接數量
- err(__('抱歉,檢測到評論外鏈過多,請重寫'));
- } else {
- return $comment;
- }
- }
- add_filter('preprocess_comment', 'BYMT_spamlinks');
新聞熱點
疑難解答
圖片精選