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);
这个终于清爽了。