前段时间写了关于屏蔽 WordPress 垃圾评论的方法,以为已经完美了,没想到又产生了垃圾评论,一看,又是全英文的!火!打算在评论中屏蔽全英文,但是网上说又会出现日文什么的,所以屏蔽的同时外加至少有一个中文,代码如下,亲测可行:

function scp_comment_post( $incoming_comment ) {
$pattern = '/[一-龥]/u';
// 禁止全英文评论
if(!preg_match($pattern, $incoming_comment['comment_content'])) {
err( "You should type some Chinese word (like \"你好\") in your comment to pass the spam-check, thanks for your patience! 您的评论中必须包含汉字!" );
}
return( $incoming_comment );
}
add_filter('preprocess_comment', 'scp_comment_post');

上面的“err”,如果是普通评论的话用“wp_die”,因为我是 Ajax 评论, 所以要用err,不然的话会产生错位。

本来啦,可以直接在JS里加入判断提示“为了促进世界和平与社会和谐,你至少要写一个中文字的说!”这类话,但是我发现那只能在普通评论里,Ajax 评论里没有办法做到,解决方法只能用上面的方法。

---------------2016.10.25 更新 ----------------

发现又有一大批的日文评论,全部垃圾评论,所以可以把日文也加进去,代码升级一下如下:

function scp_comment_post( $incoming_comment ) {
$pattern = '/[一-龥]/u';
$jpattern ='/[ぁ-ん]+|[ァ-ヴ]+/u';
// 禁止全英文评论
if(!preg_match($pattern, $incoming_comment['comment_content'])) {
err( "You should type some Chinese word (like \"你好\") in your comment to pass the spam-check, thanks for your patience! 您的评论中必须包含汉字!" );
}
//禁止全日文评论
if(preg_match($jpattern, $incoming_comment['comment_content'])){
err( "You should type some Chinese word (like \"你好\") in your comment to pass the spam-check, thanks for your patience! 您的评论中必须包含汉字!" );
}
return( $incoming_comment );
}
add_filter('preprocess_comment', 'scp_comment_post');