如何测试用户是否在仪表板中过滤帖子列表

时间:2016-08-04 作者:Riccardo

当用户访问帖子列表和媒体库时,我使用以下代码在仪表板中启用分层排除过滤系统。管理职位(&P);媒体对所有用户都是隐藏的,“教师”和“学生”都有限制。教师可以查看自己的资料和学生数据。学生仅限于他们的角色组。

问题是,如果受限用户试图在仪表板中筛选帖子列表,则该操作将被忽略,因为我的筛选系统将覆盖。

只有当用户没有选择允许的过滤器时,才应该有一种方法来应用我的过滤系统。我看到url在用户过滤上发生了变化,添加了一些参数,但这是一个不可靠的系统IMO。

有什么想法吗?

//********** post & media lists filtered by user role & category ****************
function posts_for_current_role($query) {
global $students_allowed_cat;
global $teachers_allowed_cat;
global $pagenow;
    if($query->is_admin && !current_user_can(\'administrator\')) {
        //$filtered_cat = \'3,22\';
        $user = wp_get_current_user();

        if( \'edit.php\' == $pagenow   ){
            if ( in_array( \'teacher\', (array) $user->roles ) ) {
                //The user has the "teacher" role
                $filtered_cat = $teachers_allowed_cat;
            }
            if ( in_array( \'student\', (array) $user->roles ) ) {
                //The user has the "student" role
                $filtered_cat = $students_allowed_cat;
            }
            $query->set(\'cat\',  $filtered_cat);
        }
        if( in_array( $pagenow, array( \'upload.php\', \'admin-ajax.php\' )  ) ){
            // hide media from admin
            $query->set(\'author\',  \'-1\');
        }

    }
    return $query;
}

if( !current_user_can(\'administrator\') ){
add_filter(\'pre_get_posts\', \'posts_for_current_role\');

1 个回复
SO网友:Riccardo

我找到了一个解决方案,使用$query->get(\'cat\'): 当受限用户选择“所有类别”时$query->get(\'cat\') 将返回\'0\', 因此,在这种情况下,我将应用筛选,否则我的代码将不会运行,允许应用用户选择的筛选(在限制范围内)

/********** post & media lists filtered by user role & category ****************
function posts_for_current_role($query) {
global $students_allowed_cat;
global $teachers_allowed_cat;
global $pagenow;
    if($query->is_admin && !current_user_can(\'administrator\')) {
        $user = wp_get_current_user();

        if( \'edit.php\' == $pagenow   ){
            if ($query->get(\'cat\') == \'0\'){
                if ( in_array( \'teacher\', (array) $user->roles ) ) {
                    //The user has the "teacher" role
                    $filtered_cat = $teachers_allowed_cat;
                }
                if ( in_array( \'student\', (array) $user->roles ) ) {
                    //The user has the "student" role
                    $filtered_cat = $students_allowed_cat;
                }
                $query->set(\'cat\',  $filtered_cat);
            }
        }
        if( in_array( $pagenow, array( \'upload.php\', \'admin-ajax.php\' )  ) ){
            // hide media from admin
            $query->set(\'author\',  \'-1\');
        }

    }
    return $query;
}

相关推荐

GET_POSTS查询大约需要40秒来执行

我在get\\u帖子中有一个元查询,它需要花很长时间才能完成。它工作得很好,但只是时间太长了。我有一个名为event. 在每个event 发布后,有自定义元数据:post\\U sort\\U日期(事件日期YmdHis 格式,用于排序)我需要做的是获取下一个事件,该事件相对于$year 和$month 变量。所以如果$year = 2021 和$month = 10 (2021 10月)然后应该在2021 11月或之后找到第一个事件。我下面的查询很好,但很慢。执行大约需要40秒,我不知道为什么。$next