如何有条件地重定向登录用户?

时间:2016-11-26 17:49:44

标签: wordpress

现在我知道如果我想将登录用户重定向到他们已经在的当前页面我应该使用这个过滤器

function pro_redirect_to_request( $redirect_to, $request, $user ){
// instead of using $redirect_to we're redirecting back to $request
return $request;
}
add_filter('login_redirect', 'pro_redirect_to_request', 10, 3);

但现在我有一个自定义登录页面,我想将从此页面登录的用户重定向到自定义页面,我的意思是主页。所以我对过滤器进行了这些编辑,但它没有用。

function pro_redirect_to_request( $redirect_to, $request, $user ){
// instead of using $redirect_to we're redirecting back to $request
if ($request == 'http://prosentra.com/login'){
    wp_redirect(home_url(""));
    exit();
}else{
return $request;
}
}
add_filter('login_redirect', 'pro_redirect_to_request', 10, 3);

我在这里询问用户请求登录的页面是否等于此网址' http://prosentra.com/login'然后将我重定向到主页,如果没有将我重定向到当前页面。 我应该做些什么修改?

2 个答案:

答案 0 :(得分:1)

Why don't you use HTTP_REFERER ? to check if users are coming from your custom login page.

So i just tested this with Wordpress now, It works.

function pro_redirect_to_request( $redirect_to, $request, $user ){

$prev_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

$request_url = "Your custom URL after login";
$default_url = "Your default URL"; 

if($prev_url == "http://prosentra.com/login/"){
   $redirect_to = $request_url;
} else {
   $redirect_to = $default_url;
}

return $redirect_to;

}
add_filter('login_redirect', 'pro_redirect_to_request', 10, 3);

I tested this with Woocommerce, It worked fine too.

function wc_custom_user_redirect( $redirect_to, $user ){

$prev_url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

    $request_url = "Your custom URL after login";
    $default_url = "Your default URL"; 

if($prev_url == "http://prosentra.com/login/"){
   $redirect_to = $request_url;
} else {
   $redirect_to = $default_url;
}

return $redirect_to;

}
add_filter('woocommerce_login_redirect', 'wc_custom_user_redirect', 10, 3);

答案 1 :(得分:0)

login_redirect过滤器用于更改登录后重定向到的位置

/**
 * Redirect user after successful login.
 *
 * @param string $redirect_to URL to redirect to.
 * @param string $request URL the user is coming from.
 * @param object $user Logged user's data.
 * @return string
 */
function my_login_redirect( $redirect_to, $request, $user ) {
    //is there a user to check?
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
        //check for admins
        if ( in_array( 'administrator', $user->roles ) ) {
            // redirect them to the default place
            return $redirect_to;
        } else {
            return home_url();
        }
    } else {
        return $redirect_to;
    }
}

add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );

使用匿名函数(php 5.3 +)将所有登录重定向到主页。

add_filter( 'login_redirect', create_function( '$url,$query,$user', 'return home_url();' ), 10, 3 );

你可以在这里找到参考资料

https://codex.wordpress.org/Plugin_API/Filter_Reference/login_redirect