Работает криво проверка — is_user_logged_in

Хочу закрыть посты с несколькими такс.

Но только для пользователей, которые не авторизованные, и которые не поставили галочку в профиле

add_action( 'pre_get_posts', 'exclude_category_on_front_page' );
function exclude_category_on_front_page( $query ) {

if ( is_user_logged_in() ) {
if( !wp_get_current_user()->profi ){
$query->set( 'tax_query',  array(
	array(
		'taxonomy' => 'razdel',
		'field'    => 'id',
		'terms'    => array( 1528, 1717 ),
		'operator' => 'NOT IN',
	)));

		if( has_term(['1528', '1717'], 'razdel') ){
			wp_redirect( '/top', 301 );
			exit();
		}

}
}}

Тут вся загвоздка в:

if ( is_user_logged_in() ) { }

я хочу проверить авторизован пользователь на сайте
и проверить включил ли пользователь галочку в профиле и только потом выдавать, закрытые посты

if( !wp_get_current_user()->profi ){}

Если я указываю эти условия, как в коде выше проверка нормально не срабатывает.
Не авторизованные пользователи начинают видеть посты.

Можно убрать проверку is_user_logged_in
и все работает корректно, но тогда вырастает нагрузка на хостинг, наверное из-за массовой проверки wp_get_current_user

Заметки к вопросу:
Kama 24 дня назад

Тебе нужно запрос менять в зависимости от авторизации юзера.

$is_show_posts = is_user_logged_in() && wp_get_current_user()->profi /* галка включена */;

// используй переменную где и как нужно для создания 
// параметров запроса для авторизованных и не авторизованных
// юзеров