当用户访问帖子列表和媒体库时,我使用以下代码在仪表板中启用分层排除过滤系统。管理职位(&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\');
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;
}