在此之前我曾收集过 Willin Kan 大神的 Anti Spam 版本集合,为了让 WordPress 反垃圾评论机制更加强劲,这次就与大家共同分享:WordPress 5大反垃圾评论代码。原文来自于 Fatesinger,感谢发哥!
以下所有代码均可以复制至主题文件functions.php 中直接使用。
如果有过长的链接,则自动标记为垃圾评论
大多数垃圾评论都带着很长的链接,所以对于这些漏网之鱼,如果链接的长度超过50字符,则自动标记为垃圾评论是个不错的办法。
<?php function rkv_url_spamcheck( $approved , $commentdata ) { return ( strlen( $commentdata['comment_author_url'] ) > 50 ) ? 'spam' : $approved; } add_filter( 'pre_comment_approved', 'rkv_url_spamcheck', 99, 2 ); ?>
移除评论信息中的网站地址
function remove_comment_fields($fields) { unset($fields['url']); return $fields; } add_filter('comment_form_default_fields','remove_comment_fields');
去除评论中的链接
直接将下面的代码放到functions.php
中,简单粗暴
remove_filter('comment_text', 'make_clickable', 9);
给评论中的链接自动加上 Nofollow
add_filter('comment_text', 'auto_nofollow'); function auto_nofollow($content) { //return stripslashes(wp_rel_nofollow($content)); return preg_replace_callback('/<a>]+/', 'auto_nofollow_callback', $content); } function auto_nofollow_callback($matches) { $link = $matches[0]; $site_link = get_bloginfo('url'); if (strpos($link, 'rel') === false) { $link = preg_replace("%(href=S(?!$site_link))%i", 'rel="nofollow" $1', $link); } elseif (preg_match("%href=S(?!$site_link)%i", $link)) { $link = preg_replace('/rel=S(?!nofollow)S*/i', 'rel="nofollow"', $link); } return $link; }
Anti-Spam v1.90
/* ----------------------------------------------- <;<小牆>> Anti-Spam v1.9 by Willin Kan. */ //建立 class anti_spam { function anti_spam() { if ( !is_user_logged_in() ) { add_action('template_redirect', array($this, 'w_tb'), 1); add_action('pre_comment_on_post', 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=\"60\" rows=\"4\" style=\"display:none\"></textarea>", $input);') ); } } //檢查 function gate() { ( !empty($_POST['w']) &;& empty($_POST['comment']) ) ? $_POST['comment'] = $_POST['w'] : $_POST['spam_confirmed'] = 1; } //處理 function sink( $comment ) { if ( !empty($_POST['spam_confirmed']) ) { //方法一:直接擋掉, 將 die(); 前面兩斜線刪除即可. //die(); //方法二:標記為spam, 留在資料庫檢查是否誤判. add_filter('pre_comment_approved', create_function('', 'return "spam";')); $comment['comment_content'] = "[ 小牆判斷這是Spam! ]\n" . $comment['comment_content']; } return $comment; } } $anti_spam = new anti_spam(); // -- END ----------------------------------------
神器!
大神,
哈哈,全是用的代码实现,正好合我口味,这就添加上。顺便补充一下还有一串禁止全英文和全日文的代码:
//屏蔽纯英文评论和纯日文
function inlojv_comment_post( $incoming_comment ) {
$pattern = '/[一-龥]/u';
// 禁止全英文评论
if(!preg_match($pattern, $incoming_comment['comment_content'])) {
wp_die( "您的评论中必须包含汉字!" );
}
$pattern = '/[あ-んア-ン]/u';
// 禁止日文评论
if(preg_match($pattern, $incoming_comment['comment_content'])) {
wp_die( "评论禁止包含日文!" );
}
return( $incoming_comment );
}
add_filter('preprocess_comment', 'inlojv_comment_post');
//屏蔽垃圾留言END
Nice!
水过。。
原站跳过去的。。换域名换主题换链接结构。。
大多数垃圾评论都带着很长的链接,所以对于这些漏网之鱼,如果链接的长度超过50字符,则自动标记为垃圾评论是个不错的办法。
这个怎么把它变成直接挡掉呢?
就是不添加垃圾评论,直接让它不能评论。