Typecho 文档:自定义评论提交过审条件
程序版本:1.2.1
文档作者:Lopwon
作者博客:Lopwon.com
发布页面:Lopwon.com/3505.html
许可方式:CC BY-NC-SA
注意:此文档源于作者在博客改造中的一些经验总结,转载还请署名。
敬告:此文档操作涉及程序核心文件的修改,作者不对你在使用中产生的任何问题造成的不良后果,承担责任。
文档说明
Typecho 默认的评论提交审核有两项:1.所有评论必须经过审核 2.评论者之前须有评论通过了审核。通常我们会(不勾选)第一项,而(勾选)第二项,作用是只要评论者在博客中有过审评论,再次评论时则可以直接放出评论,无须审核。
这就会存在一个问题:一些 SEOer 为了在博客中推广自己的链接,在首次评论时,会以正常的方式留言,在得到博主的过审后,接下来就是各种做外链的评论。
虽然,可以在文件 functions.php 里独立设置这两项审核条件,但似乎只能针对到页面,不能细分到更具体的条件,于是琢磨出本文档,让提交评论时,可以自定义更多的过审条件。
使用方法
A 涉及文件
var/Widget/Feedback.php
B 改造文件
作用:给评论提交自定义过审条件。
打开文件 var/Widget/Feedback.php 搜索(评论者之前须有评论通过了审核),找到与之相关的代码,如下:
/** 评论者之前须有评论通过了审核 */
if (!$this->options->commentsRequireModeration && $this->options->commentsWhitelist) {
if (
$this->size(
$this->select()->where(
'author = ? AND mail = ? AND status = ?',
$comment['author'],
$comment['mail'],
'approved'
)
)
) {
$comment['status'] = 'approved';
} else {
$comment['status'] = 'waiting';
}
}
将以上代码全部替换为以下代码(留意注释,以及按需修改):
/**
* 自定义评论过审条件
* 后台》设置》评论,所有评论必须经过审核(未勾选)
* 后台》设置》评论,评论者之前须有评论通过了审核(已勾选)
* 如果是小伙伴邮箱,则直接过审评论,否则需要审核评论
*/
if (!$this->options->commentsRequireModeration && $this->options->commentsWhitelist) {
$myFriend = 'Lopwon@qq.com,example@example.com'; //自定义小伙伴邮箱列表,多个使用半角逗号隔开,不用区分大小写
if (in_array($comment['mail'], explode(',', $myFriend))) { //可以添加更多条件,比如:在博客中的评论数必须大于指定数量,需要注意的是,使用 in_array 不能精确匹配邮箱,对于相近的邮箱会有误判的情况
$comment['status'] = 'approved';
} else if (
$this->size(
$this->select()->where(
'author = ? AND mail = ? AND status = ?',
$comment['author'],
$comment['mail'],
'approved'
)
)
) { //如果不是小伙伴邮箱,即使之前有过审评论,再次提交评论时,也必须审核
$comment['status'] = 'waiting';
}
}
至此,已完成评论者在提交评论时,满足自定义条件的评论可以直接过审,反之需要审核评论。
当然,也可以在文件 functions.php 的 function themeConfig($form) {} 中添加 $myFriend 表单,继而在文件 Feedback.php 中引用后,只需在主题设置里,就能方便的编辑小伙伴的邮箱列表了。