如何在登录后重定向从url获取变量(例如,使用语言)

时间:2014-12-02 作者:nuriarai

我使用默认的登录表单。我希望具有特定角色的用户在成功登录到主页后被重定向,但要使用用户在登录时使用的语言。

这是一个旧的WP安装,它使用mqTranslate为WP提供多语言功能。因此,url中有一个参数,在第二语言情况下,以及在登录、注册和密码丢失表单中,都具有语言值,以便向每个用户显示适当的语言表单。当用户成功登录时,我需要用他/她的语言将其重定向到主页。

以下是用于以用户选择的语言构建表单链接的过滤器:

add_filter( \'login_url\', \'my_login_page\', 10, 2 );
function my_login_page( $login_url, $redirect ) {
    $redirect = qtrans_getLanguage();
    if($redirect == \'\') $redirect = $_GET[\'lang\'];
    $new_login_url = site_url() . \'/wp-login.php?lang=\' .  $redirect;
    return $new_login_url;
}

add_filter( \'register_url\', \'my_reg_page\' );
function my_reg_page( $register_url ) {
    $lang = qtrans_getLanguage();
    if($lang == \'\') $lang = $_GET[\'lang\'];
    return site_url() . \'/wp-login.php?action=register&lang=\' . $lang;
}

add_filter( \'lostpassword_url\', \'my_lostpwd_page\' );
function my_lostpwd_page( $lostpassword_url, $redirect = \'es\') {
    $redirect = qtrans_getLanguage();
    if($redirect == \'\') $redirect = $_GET[\'lang\'];
    return site_url() . \'/wp-login.php?action=lostpassword&lang=\' . $redirect;
}
在此之前,我的问题是,在成功登录到所需语言的主页后,我尝试重定向登录表单。

// Redirect non-admins to the homepage after logging into the site.
function aux_login_redirect( $redirect_to, $request, $user  ) {
    if($_GET[\'lang\'] === \'en\') :
        $langvar = \'en\';        
    elseif($_GET[\'lang\'] === \'es\') : 
        $langvar = \'es\';
    else :
        $lang = qtrans_getLanguage();
        $langvar = $lang;
    endif;
    return ( is_array( $user->roles ) && in_array( \'administrator\', $user->roles ) ) ? admin_url() : site_url() . "/?lang=" . $langvar; 
} 
add_filter( \'login_redirect\', \'aux_login_redirect\', 10, 3 );
正如我在测试中看到的,login\\u重定向被触发两次,第一次是当用户到达登录页面时,此时过滤器仍然可以读取$\\u GET[\'lang\']变量,但当用户填写表单并单击de按钮进行登录时,过滤器会每秒触发一次,然后url丢失了变量,并且没有重定向到所需的主页。

http://domain.com/wp-login.php?lang=en必须重定向到http://domain.com/?lang=en

我也尝试过使用$\\u SESSION或全局变量,但由于在发送登录之前调用过滤器,在第二时间加载没有变量的页面之后,所有附加信息都会丢失。

我已经禁用了所有插件,并尝试在没有插件的情况下使用,但问题仍然存在。我不确定defauult行为是否包括两次加载登录表单,而且,在任何情况下,如果有人对如何实现所需的重定向有任何建议,那就太好了。

提前感谢

1 个回复
SO网友:Nori

我最终对重定向url进行了编码。在我的案例中使用php(\'http://example.com/wp-login.php?redirect_to=\'.urlencode(http://example.com/specificpage/?parameter1=dog&parameter2=dog&parameter3=cat));)

现在它工作了!

结束

相关推荐

Redirect HTTP to HTTPS

我惊喜地看到CloudFlare已经开始向其所有用户提供免费的SSL证书,my site 包括在内。我使用WordPress插件在我的页面上强制使用HTTPS SSL,但该站点仍然可以通过HTTP访问,这会导致显示问题。我想在我的中强制本机HTTP重定向到HTTPS。htaccess,但当我尝试重定向时,我遇到了一个无限重定向循环。我如何解决这个问题?