Typecho 文档:自定义评论提交过审条件

2023年08月03日

程序版本: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 中引用后,只需在主题设置里,就能方便的编辑小伙伴的邮箱列表了。
store