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

2018-02-02 11:48 866 23 条评论 龙笑天下
Dragon主题购买
便宜的1年期Https SSL证书,推荐买多年最优惠 => 单域名 / 通配符 / IP证书

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

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

纯代码实现屏蔽 WordPress 垃圾评论 跟 Spam 说再见-BG
纯代码实现屏蔽 WordPress 垃圾评论 跟 Spam 说再见
WordPress 根据评论数量来判断是否显示评论者链接-BG
WordPress 根据评论数量来判断是否显示评论者链接
为 WordPress 评论功能增加字数长度限制-BG
为 WordPress 评论功能增加字数长度限制
如何实现 WordPress 指定文章或页面允许评论昵称/内容带连接地址-BG
如何实现 WordPress 指定文章或页面允许评论昵称/内容带连接地址

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

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

便宜的 1 年期 Https SSL 证书,推荐买多年最优惠 => 单域名 / 通配符 / IP 证书

评论状态审核钩子: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 一键开启/关闭评论功能-BG
Wordpress 一键开启/关闭评论功能

相关文章

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

便宜的 1 年期 Https SSL 证书,推荐买多年最优惠 => 单域名 / 通配符 / IP 证书

「点点赞赏,手留余香」

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

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

2018-01-23

2018-02-28

发表评论

表情 格式 贴图 链接 私密 签到
Dragon主题购买阿里云特价云服务器1核2G低至86元,N4共享型服务器3年仅需799元腾讯云特价云服务器1核2G 88元/年 2核4G3M688元/3年,更有千元代金券礼包免费领!
便宜的1年期Https SSL证书,推荐买多年最优惠 => 单域名 / 通配符 / IP证书
评论
正在努力加载中...
扫一扫二维码分享
×
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