龙笑天龙笑天  2018-02-02 11:48 龙笑天下 隐藏边栏 |   23 条评论  641 
文章评分 29 次,平均分 4.9

Wordpress 控制评论状态的钩子:pre_comment_approved wordpress

昨天,群里提到了评论审核的相关规则,大家也知道我们所处的网络环境,我们网站的评论是不允许不和谐的评论的,否则后果很严重的!当然,我相信大部分站长都对各自的评论把关很严,有自己的评论控制方法,如:

纯代码实现屏蔽 WordPress 垃圾评论 跟 Spam 说再见-BG
纯代码实现屏蔽 WordPress 垃圾评论 跟 Spam 说再见

纯代码实现屏蔽 WordPress 垃圾评论 跟 Spam 说再见

垃圾评论,如今可以说是无处不在,作为 WordPress 使用者的我们,防止垃圾评论的侵扰是必须要做的。而且垃圾评论也就算了,居然还不访问我们的网站直接用脚本刷,连个 pv 值都不贡献下,太抠啦,不...
WordPress 根据评论数量来判断是否显示评论者链接-BG
WordPress 根据评论数量来判断是否显示评论者链接

WordPress 根据评论数量来判断是否显示评论者链接

本文主要讲的是你可以根据评论数来控制是否显示留言者的链接。比如说只有当评论者的评论数大于一万的时候才显示链接,如果小于一万则不显示。当然,一万只是说说而已。 这里评论数肯定要根据邮箱来统计了...
为 WordPress 评论功能增加字数长度限制-BG
为 WordPress 评论功能增加字数长度限制

为 WordPress 评论功能增加字数长度限制

很多读者在你的 WordPress 博客留言都是仅仅为了一个外链,所以他们很忙,随便发个“好文章”“顶一个”这样毫无意义的评论,虽然你可以手动删除他们,但是如果你的网站很受欢迎,删除评论也是很耗...
如何实现 WordPress 指定文章或页面允许评论昵称/内容带连接地址-BG
如何实现 WordPress 指定文章或页面允许评论昵称/内容带连接地址

如何实现 WordPress 指定文章或页面允许评论昵称/内容带连接地址

今天博客 112 兄提出了一个我认为有点奇怪的需求,也就是本文标题这个啦~~ 下班后立马折腾了下,结果死活不成功... 我是用 is_single() 和 is_page() 来判断的。 然后,...

但总会有失效或处理不及时的情况,比如,晚上睡觉这段时间,如果有些不可爱的同学在你网站留下了些不和谐的评论,你咋办捏~

因此,龙笑天下就想对评论进行进一步的控制:晚上 23:30-9:00 的评论全部设为待审核(手机认证登录用户可以无视该规则畅所欲言~)。找呀找,终于找到了一个有用的钩子:pre_comment_approved,在介绍我的方法前,就介绍下这个钩子先~

评论状态审核钩子:pre_comment_approved

描述

在将评论插入数据库之前,由 wp_allow_comment 函数调用的过滤器钩子。 该钩子适用于改变评论的审批状态,允许插件覆盖。

用法

 <?php function filter_handler( $approved , $commentdata ){ ...... }

add_filter( 'pre_comment_approved' , 'filter_handler' , '99', 2 ); ?> 

参数

$approved

(混合型)(必需)初步评论批准状态:0, 1, 'trash', or 'spam'。

默认值:无

$commentdata

(数组)(必需)评论相关数据数组,跟 get_comments()函数返回的数据相似,详细如下:

'comment_post_ID' - 评论文章 ID
'comment_author' - 评论者(可能为空)
'comment_author_email' - 评论者邮箱(可能为空)
'comment_author_url' - 评论者网址(可能为空)
'comment_author_IP' - IP 地址
'comment_agent' - 评论者 UA,e.g., "Mozilla/5.0..."
'comment_content' - 评论内容
'comment_type' - 评论类型:'pingback', 'trackback', or empty for regular comments
'user_ID' - 评论者用户 ID(访客的 ID 为空)

默认值:无

返回值

0 (int): 评论状态为"Pending" (待审核)
1 (int) : 评论状态为"Approved" (通过审核)
'spam' (string): 评论被标记为"垃圾评论"
'trash' (string): 评论被转移至"垃圾箱"

一般说来,评论被标记为“spam”或“trash”的话,则不会对外展示~

示例

好了,钩子介绍完了,下面就来几个具体的例子以供参考~

自动将包含长链接的评论标记为垃圾评论

/**
 * WordPress 控制评论状态的钩子:pre_comment_approved - 龙笑天下
 * https://www.ilxtx.com/wordpress-filter-pre-comment-approved.html
 * 实用方法:新增评论规则 -- 晚上 23:30-9:00 的评论全部设为待审核
 */
function lxtx_rkv_url_spamcheck( $approved , $commentdata ) {
    return ( strlen( $commentdata['comment_author_url'] ) > 50 ) ? 'spam' : $approved;
}
add_filter( 'pre_comment_approved', 'lxtx_rkv_url_spamcheck', 99, 2 );

登陆用户的评论无需审核

/**
 * WordPress 控制评论状态的钩子:pre_comment_approved - 龙笑天下
 * https://www.ilxtx.com/wordpress-filter-pre-comment-approved.html
 * 实用方法:新增评论规则 -- 晚上 23:30-9:00 的评论全部设为待审核
 */
function lxtx_loggedin_approved_comment($approved){
    // No need to do the check if the comment is already approved anyway.
    if (!$approved) {
        if (is_user_logged_in()) {
            // Note: 1/0, not true/false
            $approved = 1;
        }
    }
    return $approved;
}
// Action allows the comment automatic approval to be over-ridden.
add_action('pre_comment_approved', 'lxtx_loggedin_approved_comment');

特定文章/页面评论必须审核

用户在特定文章或页面的发表评论,评论必须审核,但管理员和文章作者的评论可以自动通过审核,假设该文章/页面的 ID 是 112。

/**
 * WordPress 控制评论状态的钩子:pre_comment_approved - 龙笑天下
 * https://www.ilxtx.com/wordpress-filter-pre-comment-approved.html
 * 实用方法:新增评论规则 -- 晚上 23:30-9:00 的评论全部设为待审核
 */
function lxtx_page_approved_comment($approved, $commentdata){  
    $post = get_post( $post );
    if ( !empty($post->ID) && $post->ID == 112 ) {
        $approved = 0;
        if( $user_id = $commentdata['user_id'] ){  
            $user = get_userdata( $user_id );          
            if ( $user_id == $post->post_author || $user->has_cap( 'moderate_comments' ) ){
                // The author and the admins get respect.
                $approved = 1;
            }
        }      
    }
    return $approved;
}
// Action allows the comment automatic approval to be over-ridden.
add_action('pre_comment_approved', 'lxtx_page_approved_comment', 10, 2);

晚上 23:30-9:00 的评论全部设为待审核

下面就来介绍前文说的这个方法了~ 管理员可以无视该规则~

/**
 * WordPress 控制评论状态的钩子:pre_comment_approved - 龙笑天下
 * https://www.ilxtx.com/wordpress-filter-pre-comment-approved.html
 * 实用方法:新增评论规则 -- 晚上 23:30-9:00 的评论全部设为待审核
 */
function lxtx_limit_comment_to_pending($approved, $commentdata){
	date_default_timezone_set('Asia/Shanghai'); //设置为东八区上海时间
	$time = time();
	$t1 = date("Y-m-d",$time).' 09:00:00';
	$t2 = date("Y-m-d",$time).' 23:30:00';	
	$short_t1 = strtotime($t1);
	$short_t2 = strtotime($t2);
	if( ($time>$short_t2 || $time<$short_t1) && !current_user_can('manage_options') ){
	    $approved = 0;
	}
	return $approved;
}
add_action('pre_comment_approved', 'lxtx_limit_comment_to_pending', 10, 2);

代码中涉及了时间的格式,具体的可以想见下面这篇文章~

WordPress 时间日期函数(最全最正确版):the_time()与 get_the_time()-BG
WordPress 时间日期函数(最全最正确版):the_time()与 get_the_time()

WordPress 时间日期函数(最全最正确版):the_time()与 get_the_time()

在修改的过程中,我们难免会用到时间函数,这当然就涉及到了 WordPress 的时间格式。可能很多朋友对于时间的输出表现有着比较特殊的要求,那么我们只要对时间函数: the_time() 做一...

友情提示:以上几个示例,大家可以进一步改造延伸哦~ 比如结合下文:

Wordpress 一键开启/关闭评论功能-BG
Wordpress 一键开启/关闭评论功能

Wordpress 一键开启/关闭评论功能

近期关于网站评论问题一直有各种讨论,可以看出大家对评论功能还是比较在意的,随着国内对评论的把关越来越严,这个功能应该是值得知道的:“如何一键关闭或开启网站评论功能”。 在 wordpress 的...

相关文章

Plugin API/Filter Reference/pre comment approved « WordPress Codex
自动将包含长链接的评论标记为垃圾评论 | WordPress 大学
WordPress:用代码设置评论审核机制 – ~SolagirL~

「点点赞赏,手留余香」

还没有人赞赏,快来当第一个赞赏的人吧!

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

龙笑天
龙笑天 关注:32    粉丝:41
互助分享,互联网本该如此!

发表评论

最赞评论
  1. mengkun
    mengkun 来自天朝的朋友 谷歌浏览器 55.0.2883.87 Windows 10 湖南省长沙市 电信

    @龙笑天 稍微精简了一下 [呲牙]

    function lxtx_limit_comment_to_pending($approved, $commentdata){
        date_default_timezone_set('Asia/Shanghai'); //设置为东八区上海时间
        if(!current_user_can('manage_options')) {
            if((date('G') < 9) || (date('G') > 23)) $approved = 0;    // 23:00~9:00 待审核
        }
        return $approved;
    }
    add_action('pre_comment_approved', 'lxtx_limit_comment_to_pending', 10, 2);

    PS.你成功地“诱导”我注册了个账号,居然未登录不能超过 200 字符…… [二哈]

  2. 西枫里博客
    西枫里博客 评论达人 LV.3 来自天朝的朋友 搜狗浏览器 2.X Windows 7 上海市 联通

    这么多规则,哈哈。你也是牛逼的~

  3. 晓庄
    晓庄 来自天朝的朋友 谷歌浏览器 63.0.3239.84 Windows 10 广东省深圳市 电信

    前来膜拜

  1. 大盗贼 来自天朝的朋友 谷歌浏览器 62.0.3202.94 Windows 7 陕西省西安市 西大街西域网城

    没遇到过这个需求,学习下

    7楼 2018-02-05 09:11
  2. 云落
    云落 来自天朝的朋友 谷歌浏览器 63.0.3239.132 Windows 10 江苏省淮安市 电信

    过会我也看看

    6楼 2018-02-02 16:31
  3. 西枫里博客
    西枫里博客 评论达人 LV.3 来自天朝的朋友 搜狗浏览器 2.X Windows 7 上海市 联通

    这么多规则,哈哈。你也是牛逼的~

    5楼 2018-02-02 14:45
  4. mengkun
    mengkun 来自天朝的朋友 谷歌浏览器 55.0.2883.87 Windows 10 湖南省长沙市 电信

    点个赞,很不错的想法! [赞]

    4楼 2018-02-02 12:10
    • 龙笑天
      龙笑天 永久会员 博主 来自天朝的朋友 火狐浏览器 Windows 7

      @mengkun求大佬改进下时间段判断方法呗~~ [可怜]

      • mengkun
        mengkun 来自天朝的朋友 谷歌浏览器 55.0.2883.87 Windows 10 湖南省长沙市 电信

        @龙笑天 稍微精简了一下 [呲牙]

        function lxtx_limit_comment_to_pending($approved, $commentdata){
            date_default_timezone_set('Asia/Shanghai'); //设置为东八区上海时间
            if(!current_user_can('manage_options')) {
                if((date('G') < 9) || (date('G') > 23)) $approved = 0;    // 23:00~9:00 待审核
            }
            return $approved;
        }
        add_action('pre_comment_approved', 'lxtx_limit_comment_to_pending', 10, 2);

        PS.你成功地“诱导”我注册了个账号,居然未登录不能超过 200 字符…… [二哈]

  5. 橘子书
    橘子书 评论达人 LV.3 来自天朝的朋友 谷歌浏览器 64.0.3282.119 Windows 10 福建省漳州市 电信

    dalao,请收下我的膝盖!

    地板 2018-02-02 11:55
  6. 喵喵喵博客
    喵喵喵博客 来自天朝的朋友 谷歌浏览器 63.0.3239.132 Windows 10 山东省 移动

    为龙大佬疯狂打 call [滑稽]

    板凳 2018-02-02 11:54
  7. 晓庄
    晓庄 来自天朝的朋友 谷歌浏览器 63.0.3239.84 Windows 10 广东省深圳市 电信

    前来膜拜

    沙发 2018-02-02 11:51
扫一扫二维码分享