我在主题functions.php中使用add_role( 'travel_agent', 'Travel Agent', array( 'book_hotel' ) );
创建了一个名为“旅行社”的自定义角色
但是,我不希望此用户有权访问仪表板,因此我希望在登录后将其重定向到“my-account”。
我在wp-login.php / functions.php上使用此代码没有任何运气:
function redirect_agents() {
if ( current_user_can('book_hotel') ){
return '/my-account';
}
}
add_filter('login_redirect', 'redirect_agents');
但是,我没有被重定向..但是如果我使用这样的代码而没有If在functions.php这样:
function redirect_agents() {
return '/my-account';
}
add_filter('login_redirect', 'redirect_agents');
虽然有效,但所有用户都会被重定向到我的帐户。非常感谢任何帮助!
答案 0 :(得分:1)
为什么不使用WordPress global $ current_user。
if(in_array('travel_agent', $current_user->roles)) {
return '/my-account';
}
答案 1 :(得分:0)
login_redirect
过滤器接受三个参数:redirect_to
(包含当前重定向值),request
(用户来自的网址)和user
(用户已作为WP_User对象登录。)
您可以使用函数内的user
参数来确定是否重定向:
add_filter( "login_redirect", "custom_login_redirect", 10, 3 );
function custom_login_redirect( $redirect_to, $request, $user )
{
if ( in_array( "role_name", $user -> roles ) )
{
return "/hello-world";
}
// Remember to return something just in case,
// as filters can possibly block execution if
// they do not return anything.
else
{
return $redirect_to;
}
}
您可能还想验证$user
是否是正确的WP_User对象,以确保正确执行。
您可以尝试使用$ current_user全局变量,但在执行login_redirect
时可能会定义也可能不定义。