WordPress:如何在';初始';钩还是另一个钩子更好?
如果用户不是管理员,我想重定向他们,我在WordPress:如何在';初始';钩还是另一个钩子更好?,wordpress,wordpress-hook,wordpress-action,Wordpress,Wordpress Hook,Wordpress Action,如果用户不是管理员,我想重定向他们,我在add_action('init')…函数中这样做 但是,如果URL路径类似于/wp json(v1/…(因此不是用户而是自定义RESTAPI请求),我不想重定向用户 我如何获取请求的URL并决定它?我应该在inithook中这样做吗 function redirect_users() { global $wp; // $url = get_url(); // if ($url === 'whate
add_action('init')…
函数中这样做
但是,如果URL路径类似于/wp json(v1/…
(因此不是用户而是自定义RESTAPI请求),我不想重定向用户
我如何获取请求的URL并决定它?我应该在init
hook中这样做吗
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);
我使用hooksparse_request
或template_redirect
,前者作为参数接收wp
对象
我怎样才能抓取请求的URL并做出决定
要获取请求的URL,您可以使用superglobal。不过,在您的情况下,我更喜欢使用$wp->request
,其中包括URL的路径部分
我应该在init
hook中执行此操作吗
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);
我认为重定向最合适的钩子是
因此,把所有这些放在一起:
<?php
namespace kw_signup;
add_action( 'template_redirect', __NAMESPACE__ . '\redirect_non_admin_users' );
function redirect_non_admin_users() {
global $wp;
// Check if the requested URL does not start with a specific string
if ( ! preg_match( '/^wp-json\//', $wp->request ) ) {
// URL is not a custom REST API request
// Check if user is an administrator, redirect, …
}
}
谢谢!我知道我也可以使用hook解析请求
,如果你告诉我这个hook不是有效选项,我会编辑这个问题