代码的问题是,您根本没有以任何方式修改查询,所以站点上的所有查询仍然会收到这些帖子,所以它们在列表中可见。之后,您可以使用template_include
过滤器,允许您重定向单个帖子视图和单个类别存档,如果它对于给定用户不可见。。。在这种情况下,重定向到主页也不是最好的-它可能会让用户感到困惑。。。
那么,如何正确隐藏这些帖子,让用户根本看不到它们呢?
您应该使用pre_get_posts
滤器通过这种方式,您可以检查当前用户是否可以看到这些帖子并隐藏它们,如果他不应该这样做的话。
function check_user() {
if ( ! get_current_user_id() ) { // this way you won\'t get notices when user is not logged in
return false;
}
$user = wp_get_current_user();
$restricted_groups = array(\'company1\', \'company2\', \'company3\', \'subscriber\'); // categories subscribers cannot see
if ( array_intersect( $restricted_groups, $user->roles ) ) {
// user is a subscriber or restricted user
return false;
}
return true;
}
function restrict_users_categories( $query ) {
if ( ! is_admin() ) {
if ( ! check_user() ) {
// change 1, 2, 3 to IDs of your excluded categories
$cats_excluded = array_merge( array(1, 2, 3), (array)$query->get( \'category__not_in\' ) ); // don\'t ignore any other excluded categories
$query->set( \'category__not_in\', $cats_excluded );
}
}
}
add_action( \'pre_get_posts\', \'restrict_users_categories\' );
还有。。。你有点奇怪
check_user
作用如果您想检查用户是否具有以下角色之一“company1”、“company2”,等等,那么就可以了。
但如果您只想限制订阅者,那么应该:
function check_user() {
if ( ! get_current_user_id() ) { // this way you won\'t get notices when user is not logged in
return false;
}
$user = wp_get_current_user();
if ( in_array( \'subscriber\', $user->roles ) ) {
// user is a subscriber
return false;
}
return true;
}