У мене була подібна вимога, коли я не повинен дозволяти користувачам отримувати доступ до сторінки avtor.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();