wordpress阻止垃圾评论终极大招

发表于

垃圾评论太多,插件也不起作用。有效方法是修改wp-comments-post.php和模板的functions.php添加如下代码,基本上是只允许手工在本站页面提交评论才可以成功。思路是:请求方式不是post的,一律抛弃;域名来源不是本站的,一律抛弃;不含中文的,一律抛弃。

一、在wp-comments-post.php开头添加如下代码:

if (!isset($_SERVER['REQUEST_METHOD']) || strcasecmp($_SERVER['REQUEST_METHOD'],'POST')) {
//echo 'the REQUEST_METHOD is get. STOP! STOP! STOP!';
http_response_code(400);
exit();
}
$domains=array('123.com','abc.com','域名3.com'); //自己网站的域名列表
$host_from="STOP";
if (isset($_SERVER['HTTP_REFERER'])) $host_from=parse_url($_SERVER['HTTP_REFERER'])['host'];
if (in_array($host_from,$domains)!=TRUE)
{
//echo 'ROBOT! STOP! STOP! STOP!';
http_response_code(400);
exit();
}

 

二、在functions.php结尾添加如下代码:

/* 评论验证中文 */
function refused_spam_comments( $comment_data ) {
$pattern = '/[一-龥]/u';
if(!preg_match($pattern,$comment_data['comment_content'])) {
wp_die("亲,我们都是中国人,评论中没有<font color='red'><b>汉字</b></font>可不行!");
}

 

if(strpos($comment_data['comment_content'],"http")){
wp_die("亲,'http'是不被允许的!");
}
return( $comment_data );
}
add_filter('preprocess_comment','refused_spam_comments');

三、在模板comments.php里添加一个预制信息,比如:<input  id="xxx" name="xxx" type="hidden" value="xxx" />
然后在wp-comments-post.php开头添加验证
if ($_POST["xxx"]!="xxx")
{
echo "不明来源!";
exit();
}