WordPress防止评论冒充博主
日期:
标签:WordPress教程
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务: 点此联系我
有这样的一个问题,WordPress默认并不会审核评论到底是不是博主发表的,如果有人知道博主的昵称和Email (这是很容易搞到的),那么它使用这个昵称和Email,就可以成功的冒充博主发表评论,进而可能会欺骗其他访客。这对于好多天都不查看自己博客的博主来说,是极其危险的,可能会对你的博客以及你个人的信誉造成很坏的影响;当然如果你一天登陆你的博客N多次,那么这样的问题就不是问题了。下面我教你如何解决这个问题,用文本编辑器打开当前主题目录下的functions.php,将第一个 <?php 替换成以下代码:
<?php
/**
* 名称: WordPress添加投稿功能
* 作者:露兜
* 博客:https://www.ludou.org/
* 最后修改:2011年02月16日
*/
function ludou_usecheck($incoming_comment) {
$isSpam = 0;
// 将以下代码中的 Ludou 改成博主昵称
if (trim($incoming_comment['comment_author']) == 'Ludou')
$isSpam = 1;
// 将以下代码中的 example#ludou.org 改成博主Email
if (trim($incoming_comment['comment_author_email']) == 'example#ludou.org')
$isSpam = 1;
if(!$isSpam)
return $incoming_comment;
wp_die('请勿冒充博主发表评论');
}
if(!is_user_logged_in())
add_filter( 'preprocess_comment', 'ludou_usecheck' );
更改完毕后用UTF-8编码保存,这样未登录的用户就无法使用博主昵称和Email来发表评论了!当然如果你的博客还有其他的注册用户,那么他们使用的昵称可能会跟博主的昵称相同(如果出现这种情况,博主可以干涉),但是Email是不允许相同的,对于博客的注册用户,管理起来是相当简单的。
以上代码只是做了一个简单的判断,并不需要读取数据库等操作,也不需要去重载相关的函数,故不会消耗太多的运行时间。以后博主要发表评论的话,请先登录。
如果你需要更加强大的防垃圾评论的插件,可以是试试:WordPress评论过滤插件 – 大篱
-- 完 --
本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/wordpress-prevent-imitate-blog-host.html
很不错啊。马克马克~
应该写,“冒充管理员?完蛋去吧!”哈哈
这个很实用
这个方法很好啊
哈~幸好我人气不高~~
很好的方法呢!学习了
有没有关于评论的hook,在发表之前检查,如果冒充,就不通过?这样就不必改动核心代码了。
@大刘 最近在开发一个类似的插件,近两天会发布。
@大刘 文章中代码已经修改,这样就不必修改源文件了。
有错误哦,博主登录后也被阻止了。
@huayute 一时失误,已修正。
刚刚在网上弄了一个免费空间,安装了wordpress研究。
这个很怕怕
这个倒是没有留意
博主的文章写的真好,支持一下,先收藏了。
请问只能防止冒充一个管理员吗?我的博客有几个管理员,请问该怎么做啊?
@Houyonglu 多个管理员的话可以将第13行代码改成:
$admin = array("Ludou", "admin", "abc");
if (in_array(trim($incoming_comment['comment_author']), $admin))
其中"Ludou", "admin", "abc"这些是管理员的名称,可自行增减,用引号和逗号括起来并隔开
@Ludou 谢谢。我是个初学者,一直都很喜欢看你的文章,每次都能学到很多东西。
@Ludou 你好!我想问下,多用户设置的话 除了修改第13行用户名外,是否也要修改 第17行的用户邮箱添加进去呢?
@紫色檀香 Email主要是提供头像功能,头像对于辨别博主没有太大意义,别人也可以使用你的头像。
@Ludou 谢谢,明白了!
第9行的这个 ludou_usecheck 我们不需要更改吧?
@紫色檀香 要改就把27行的也改了
@Ludou 谢谢!
@Ludou 顺便再问下,如果需要添加多管理员的话 邮箱代码怎么修改呢?
@紫色檀香 17行改成:
$adminEmail = array('Ludou@ludou.org', 'admin@ludou.org');
if(in_array(trim($incoming_comment['comment_author_email']), $adminEmail))
<?php 替换成以下代码: 这个 <?php 是哪个地方结束的。 用utf-8编码保存,这个是指 notepad++是在格式里面选utf-8编码然后保存不。。望解答。谢谢
@xilou 我自己解决了。能够禁止冒充了。编码还是个问题,只好弄了句英语
@xilou 直接评论设置黑名单不就好了,我试了 没问题i
@xilou <?php 对应最近的一个 ?>,utf-8编码的保存如你所说。
这个挺有用的,感谢ludou分享!
我试试
@aaa 本博未开启此功能。反正都要审核才能显示。
嗯,我也被这个苦恼了下,不过看了下,评论里面有个黑名单,把博主的名字加进去不就可以了吗
@李英杰 黑名单也会让评论进入数据库,你在后台是可以看到。
本文介绍的方法直接拒绝将评论存入数据库。
@Ludou 那不怕akismet,可以自动删除这些的嘛
@李英杰 你也在这 哈哈
@疯子的世界 哇,不会吧,他乡遇故知,你怎么会忽然转到这里来了,这网络世界也太小了吧
你这个方法我用了,跟我的主题不兼容,提示错误之后整个页面排版都乱掉了!
我自己又找了个方法,比这个要简洁不少!
有没有办法实现每篇文章只允许登录用户评论一次?
@高高 教程:https://www.ludou.org/wordpress-only-allow-comment-once-per-post.html
function dmeng_check($username,$usermail){
echo('name:'.$username.' mail:'.$usermail);die();
}
add_action ('register_post' , 'dmeng_check');
以上代码可以输出用户名,但邮箱无法输出,我想要输出邮箱地址,变量要怎么写?
大佬 4.7版本添加代码后网站就打不开啦