Mark's Way

路漫漫其修远兮,吾将上下而求索

comments_clauses 过滤评论列表

2020的第一天,我失眠了,想起去年(也就是昨天)客户提出的一个要求:
1、后台留言非常多,管理员回复的评论和用户回复的都全部显示在一起,视觉体验上非常差,批量快速回复无效率。
2、希望可以在后台评论管理全部列表里隐藏管理员回复的评论

好,有需求那就好好。第一时间想到的wordpress评论里的pre_get_comments 这个Hook, 一看源代码,嗯,引用了$this,直接操作实例?
难道和pre_get_posts一样,有set方法可以进行修改吗? 再过了一次代码,并没有发现set方法。

再看wp_comment_query类,嗯,终于看到了 comments_clauses, 有了这个就好办,直接上代码,


add_filter(  "comments_clauses", function( $data, $query ) {
	if(is_admin()){ //用is_admin判断,只在后台生效
		if(  // 判断只作用于评论管理中view为全部的情况下,做一个判断
			( isset($_REQUEST['comment_status']) && $_REQUEST['comment_status'] === 'all' ) || 
			!isset( $_REQUEST['comment_status'] )
		){
			$user_id = get_current_user_id();
			//在这里排队一下当前登陆用户的id吧
			if( isset($data['where']) && strpos( $data['where'], 'user_id') === false ){
				$data['where'] = $data['where'] . " AND ( user_id != {$user_id}) ";
			}
		}
	}
	return $data;
}, 10, 2);

这个终于清爽了。