昨天,群里提到了评论审核的相关规则,大家也知道我们所处的网络环境,我们网站的评论是不允许不和谐的评论的,否则后果很严重的!当然,我相信大部分站长都对各自的评论把关很严,有自己的评论控制方法,如:
- 纯代码实现彻底屏蔽 WordPress 站点垃圾评论
- WordPress 实现一键开启或关闭评论功能的教程
- 如何实现 WordPress 指定文章或页面允许评论带链接
- WordPress 根据评论数量来判断是否显示评论者链接
- 纯代码实现自动替换 WordPress 评论内容中的敏感词
但总会有失效或处理不及时的情况,比如,晚上睡觉这段时间,如果有些不可爱的同学在你网站留下了些不和谐的评论,你咋办捏~
因此,龙笑天下就想对评论进行进一步的控制:如晚上 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”的话,则不会对外展示~
示例
好了,钩子介绍完了,下面就来几个具体的例子以供参考~
1、自动将包含长链接的评论标记为垃圾评论
- /**
- * 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 );
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’);
3、特定文章/页面评论必须审核
用户在特定文章或页面的发表评论,评论必须审核,但管理员和文章作者的评论可以自动通过审核,假设该文章/页面的 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 ( !emptyempty($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);
4、晚上 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);
代码中涉及了时间的格式,具体的可以想见下面这篇文章~
[wplist title=”WordPress 时间日期函数(最全最正确版)” link=”https://www.ilxtx.com/wordpress-function-the-time.html” img=”https://boke112.com/img/2018/180208_time.jpg”]我们在修改的过程中难免会用到时间函数,这当然就涉及到了 WordPress 的时间格式。可能很多朋友对于时间的输出表现有着比较特殊的要求,那么我们只要对时间函数: the_time() 做一些对应的修改,就能达到我们想的效果。[/wplist]
友情提示:以上几个示例,大家可以进一步改造延伸哦~ 比如结合下文: