Tôi có một yêu cầu tương tự khi tôi không nên cho phép người dùng truy cập trang Author.php dựa trên vai trò của người dùng. Tôi đăng ký hành động template_redirect để kiểm tra và chuyển hướng đến trang 404 ngay cả trước khi trang thực sự được tải.
Đăng ký:
add_action( 'template_redirect', [ $this, 'handle_inactive_users']);
Xử lý:
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();
}
}
}
Nếu bạn chọn chỉ sử dụng đoạn mã sau ở giữa phần mẫu, trang có thể đã được hiển thị một phần và bạn không thực sự được chuyển hướng đến trang 404. Vì vậy, tốt hơn để làm điều đó trong template_redirect
hành động -
$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();