WordPress实现在指定时间段内评论为待审核状态的教程

投稿   龙笑天下  2018-02-08 07:34:30  98 人阅读  24 条评论

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

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

WordPress实现在指定时间段内评论为待审核状态的教程 WordPress 第1张

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

评论状态审核钩子:Pre_comment_approved

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

用法:

  1. <?php function filter_handler( $approved , $commentdata ){ ...... }
  2. 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”的话,则不会对外展示~

示例

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

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

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

2、登陆用户的评论无需审核

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

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

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

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

4、晚上 23:30-9:00的评论全部设为待审核(今天重点)

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

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

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

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

相关文章

历史上的今天:

如果文章对你有帮助,请赞赏支持作者继续创作!

文章标签: ,   ,   ,  
原文地址:https://www.ilxtx.com/wordpress-filter-pre-comment-approved.html
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为投稿文章,感谢 龙笑天下 的投稿,版权归原作者所有,欢迎分享本文,转载请保留出处!
WordPress/zblogPHP免费响应式博客主题Blogs

 发表评论


  1. BanYuner
    BanYuner 【进士】 @回复

    这个是一个不错的选择,不过我已经开启了在评论之前评论者先前须有评论通过了审核这个功能,基本杜绝了那些坑的评论

    • 懿古今
      懿古今【村长】2018-02-09 15:56  回复

      @BanYuner开了CDN之后,好像总是会误杀,有些明明之前已经有评论通过过,但是依然需要审核

      • 明月登楼
        明月登楼 【王爷】2018-02-10 23:18  回复

        @懿古今出现误杀的主要原因就是评论者的真实IP被 CDN 给遮挡了,服务器无法获取真实IP也就无法做出准确的判断了!

  2. 钟水洲博客
    钟水洲博客 【进士】 @回复

    以后转wp,再用

  3. 99八十一
    99八十一 【状元】 @回复

    龙大佬真能折腾,佩服 [赞]

  4. 春熙路
    春熙路 【尚书】 @回复

    这个可以,666

  5. 心动科技
    心动科技 【进士】 @回复

    [偷笑] 龙哥不错啊,我才刚把网站备案搞定,升级完,这个功能我可以玩玩了~

  6. 西枫里博客
    西枫里博客 【举人】 @回复

    龙大佬玩的越来越666了~

  7. 90客栈
    90客栈 【尚书】 @回复

    这个功能感觉挺实用的

  8. 趣知识
    趣知识 【丞相】 @回复

    针对不能实时维护,有用

  9. 历史趣谈
    历史趣谈 【进士】 @回复

    不错的功能,很实用

  10. 狂放
    狂放 【进士】 @回复

    我们所处的网络环境,手动滑稽有危险哦。

  11. 面料
    面料 【举人】 @回复

    又是一个不错的功能啊

  12. 橘子书
    橘子书 【丞相】 @回复

    一段好的代码,对于运维是福音

  13. 龙笑天
    龙笑天 【状元】 @回复

    [哈哈] 我的一个小合集啊~~ PS: 最后一段和前面的链接重合了哦~

  14. 靠谱学生兼职网
    靠谱学生兼职网 【尚书】 @回复

    学习了,原来,评论用得好省心,用不好闹心

  15. worthpin
    worthpin 【书童】 @回复

    可以屏蔽国外垃圾评论。

  16. 煮只鸡
    煮只鸡 【秀才】 @回复

    [呵呵] 感谢前辈们的分享,以后可能会用的上。

  17. 沈唁志
    沈唁志 【进士】 @回复

    又长知识了 龙大佬666

  18. 明月登楼学习笔记
    明月登楼学习笔记 【状元】 @回复

    不错,可惜 Typecho 没有这样的代码,郁闷呀!

  19. 银色月航
    银色月航 【进士】 @回复

    好,干货~~

  20. 明月登楼
    明月登楼 【王爷】 @回复

    哈哈,这个一定要支持一下!