WordPress 控制评论状态的钩子:pre_comment_approved

2018-02-02 11:48 854 23 条评论 龙笑天下
Dragon主题购买

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

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

纯代码实现屏蔽 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 的...

相关文章

pre_comment_approved | Hook | WordPress Developer Resources
自动将包含长链接的评论标记为垃圾评论 | WordPress 大学
WordPress:用代码设置评论审核机制 – ~SolagirL~

「点点赞赏,手留余香」

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

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

2018-01-23

2018-02-28

发表评论

表情 格式 贴图 链接 私密 签到
Dragon主题购买阿里云特价云服务器1核2G低至86元,N4共享型服务器3年仅需799元腾讯云特价云服务器1核2G 88元/年 2核4G3M688元/3年,更有千元代金券礼包免费领!
评论
正在努力加载中...
扫一扫二维码分享
×
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept”, you consent to the use of ALL the cookies. Learn more
Dragon