У меня было такое же требование, когда я не должен позволять пользователям получать доступ к странице author.php в зависимости от роли, в которой находился пользователь. Я регистрирую действие template_redirect, чтобы выполнить свои проверки и перенаправить на страницу 404 даже до загрузки самой страницы.
Постановка на учет:
add_action( 'template_redirect', [ $this, 'handle_inactive_users']);
Обработчик:
public function handle_inactive_users() {
global $wp_query;
if ( $wp_query->is_author() ) {
$user = $wp_query->get_queried_object();
if ( is_a( $user, \WP_User::class ) && $user->has_cap( 'inactive' ) ) {
$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();
}
}
}
Если вы решили использовать только следующий фрагмент кода в середине части шаблона, возможно, страница уже частично отрисована, и вы фактически не перенаправлены на страницу 404. Так что лучше делать это в template_redirect
действии -
$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();