龙笑天龙笑天  2018-02-02 11:48 龙笑天下 隐藏边栏 |   23 条评论  652 
文章评分 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    粉丝:42
互助分享,互联网本该如此!

发表评论

评论
正在努力加载中...
扫一扫二维码分享