WordPress后台评论如何限制用户的显示内容?

在维护一个WordPress站点时,可能您邀请了很多投稿人、作者,来丰富您站点的内容;但您并不需要他们来维护后台一些日常事项,比如说评论的审批、垃圾评论的删除等动作。
而后台评论管理界面中,实际上不管登录用户是什么角色,都可以看到待审的评论,被标记为垃圾的评论。
在后台评论管理里默认的内容列表,用户不受限制

那该如何限制用户的显示内容呢?这里节选一段我在百度知道里的原创回答,供参考:

wordpress怎么让注册用户不显示待审核的评论?
wordpress怎么让注册用户不显示待审核的评论?审核通过的可以显示,垃圾评论也不显示,回收站只显示自己的评论!

以下是我的回复:

按您的要求,除administrator外,都是注册用户,所以可以在当前皮肤的functions.php中做如下判断:


if ( ! is_super_admin() ){//非管理员
    //blablabla...
}

然后将待审、垃圾评论、已回收的评论信息不显示。这可以对get_comments函数提供的pre_get_comments钩子进行设置,比如:

add_action( 'pre_get_comments', 'dit_hide_some_comments', 999 );
function dit_hide_some_comments( $comments ){
        $comments->query_vars['status'] = 'approve'; //获取评论信息时只显示已审核批准的。
        return $comments;
}

这时如果注册用户查看回收站时,又要只能显示当前用户自己的。所以还要增加点判断

function dit_hide_some_comments( $comments ){
        $status = $comments->query_vars['status'];
        if ( 'trash' == $status ) {//当用户选择显示回收站时,将ID添加进筛选条件
            global $current_user;
            $comments->query_vars['user_id'] = $current_user->ID;
        }else {
            $comments->query_vars['status'] = 'approve'; //获取评论信息时只显示已审核批准的。
        }
        return $comments;
}

所以,最后放在functions.php中的代码片段整合如下:

if ( ! is_super_admin() ){//非管理员
    add_action( 'pre_get_comments', 'dit_hide_some_comments', 999 );
    function dit_hide_some_comments( $comments ){
            $status = $comments->query_vars['status'];
            if ( 'trash' == $status ) {//当用户选择显示回收站时,将ID添加进筛选条件
                global $current_user;
                $comments->query_vars['user_id'] = $current_user->ID;
            }else {
                $comments->query_vars['status'] = 'approve'; //获取评论信息时只显示已审核批准的。
            }
            return $comments;
    }
}

WordPress的插件机制,给后期的自定义提供了很大的舞台;这只是我花了一些时间查看源码后得出的答案,也可能另有更佳的解决方案;还望多多拍砖与交流。

标题所讲“限制用户的显示内容”代表着还有更进一步的需求,比如限制用户只能看到自己发表的日志所获得的评论?具体可移步参考:Restricting users to seeing only comments on their posts in admin

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注