如果他们不是管理员,我想重定向用户,我在一个add_action('init'...
函数中做
但是,如果 URL 路径类似于/wp-json(v1/...
(所以不是用户而是自定义 REST API 请求) ,我不想重定向用户
我如何获取请求的 URL 并做出决定?我应该在init
钩子内这样做吗?
function redirect_users()
{
global $wp;
// $url = get_url();
// if ($url === 'whatever') {
// return;
// }
if (get_current_user_id()) {
$user = get_userdata(get_current_user_id());
$user_roles = $user->roles;
if (!in_array('administrator', (array) $user_roles)) {
wp_logout();
wp_redirect($url);
exit;
}
}
}
add_action('init', '\kw_signup\redirect_non_admin_users', 15);
从接受的答案
if (!preg_match('/^wp-json\//', $wp->request)) {
if (!get_current_user_id()) {
wp_redirect($url);
exit();
}
if (get_current_user_id()) {
$user = get_userdata(get_current_user_id());
$user_roles = $user->roles;
if (!in_array('administrator', (array) $user_roles)) {
wp_redirect($url);
exit();
}
}
}
}
add_action('parse_request', '\kw_signup\redirect_non_admin_users', 15);
我使用钩子,parse_request
或者template_redirect
使用前者,您将wp
对象作为参数接收