垃圾評論是各位wordpress博客主的一個頭痛的問題當然也包括了我了,現在我整理了一些關于垃圾評論的防止方法,希望這些代碼能幫助各位解決頭痛之事呀.
今天,翼帆遠航將介紹兩種把垃圾評論阻擋在門外的方法。
一般情況下,我們會使用著名的反垃圾評論插件:Akismet 來阻止垃圾評論的入侵,Akismet 會將所有識別出的垃圾評論分離出來,并提供一鍵清理垃圾評論的功能,雖然 Akismet 幾乎能夠 100% 識別出垃圾評論,但由于每天的垃圾評論實在太多,天天點“一鍵清理”也不是辦法,有沒有更加實用的解決方案,能將垃圾評論在提交之前先攔截下來呢?
我們先來分析垃圾評論的類型:
純英文或含有日文、韓文等他國語言的垃圾評論
固定某個網站用于推廣的垃圾評論
對于這兩類垃圾評論,我們對癥下藥,使用兩種方法,分別將這兩類垃圾評論阻擋在門外。
方法一:不允許純英文或包含日文、韓文等他國語言的評論提交
將以下代碼插入主題目錄 functions.php 的合適位置:
- // 禁止全英文和日文評論
- function v7v3_comment_post( $incoming_comment ) {
- $pattern = '/[一-?]/u';
- $jpattern ='/[ぁ-ん]+|[ァ-ヴ]+/u';
- if(!preg_match($pattern, $incoming_comment['comment_content'])) {
- err( "寫點漢字吧,博主外語很捉急! Please write some chinese words!" );
- }
- if(preg_match($jpattern, $incoming_comment['comment_content'])){
- err( "日文滾粗!Japanese Get out!日本?出て行け!" );
- }
- return( $incoming_comment );
- }
- add_filter('preprocess_comment', 'v7v3_comment_post');
溫馨提示:若使用以上代碼出現異常,請嘗試將第 6 行和第 9 行的 err 換成 wpdie。
方法二:阻止含有違禁關鍵字的評論提交
將以下代碼插入主題目錄 functions.php 的合適位置:
- // 禁止包含違禁關鍵字的評論提交到數據庫
- function v7v3_fuckspam($comment)
- {
- if (is_user_logged_in())
- {
- return $comment;
- }
- if (wp_blacklist_check(
- $comment['comment_author'],
- $comment['comment_author_email'],
- $comment['comment_author_url'],
- $comment['comment_content'],
- $comment['comment_author_IP'],
- $comment['comment_agent']
- ))
- {
- header("Content-type: text/html; charset=utf-8");
- err('
- 您的評論包含違禁關鍵字,或者您的IP已被加入黑名單,如有疑問請聯系管理員處理!
- ');
- }
- else
- {
- return $comment;
- }
- }
- add_filter('preprocess_comment', 'v7v3_fuckspam');
溫馨提示:若使用以上代碼出現異常,請嘗試將第 6 行和第 9 行的 err 換成 wpdie。
違禁關鍵字的設置在“儀表盤——設置——討論——評論黑名單”,一個違禁關鍵字占一行,此方法依舊是來自 Willin Kan 大師(可惜他已經退出WordPress圈),折騰很簡單,直接將下面的代碼放到主題的functions.php文件的最后一個 ?>前面即可
代碼如下:
- / 垃圾評論攔截
- 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><textarea name="comment" cols="100%" rows="4" style="display:none"></textarea>",$input);') );
- }
- }
- function gate() {
- if ( !emptyempty($_POST['w']) && emptyempty($_POST['comment']) ) {
- $_POST['comment'] = $_POST['w'];
- } else {
- $request = $_SERVER['REQUEST_URI'];
- $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '隱瞞';
- $IP = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] . ' (透過代理)' : $_SERVER["REMOTE_ADDR"];
- $way = isset($_POST['w']) ? '手動操作' : '未經評論表格';
- $spamcom = isset($_POST['comment']) ? $_POST['comment'] : null;
- $_POST['spam_confirmed'] = "請求: ". $request. "n來路: ". $referer. "nIP: ". $IP. "n方式: ". $way. "n?熱? ". $spamcom. "n -- 記錄成功 --";
- }
- }
- function sink( $comment ) {
- if ( !emptyempty($_POST['spam_confirmed']) ) {
- if ( in_array( $comment['comment_type'], array('pingback', 'trackback') ) ) return $comment;
- //方法一: 直接擋掉, ? die(); 前面兩斜線?h除即可.
- die();
- //方法二: 標記為 spam, 留在資料庫檢查是否誤判.
- //add_filter('pre_comment_approved', create_function('', 'return "spam";'));
- //$comment['comment_content'] = "[ 小墻判斷這是 Spam! ]n". $_POST['spam_confirmed'];
- }
- return $comment;
- }
- }
- $anti_spam = new anti_spam();
新聞熱點
疑難解答
圖片精選