我使用默认的登录表单。我希望具有特定角色的用户在成功登录到主页后被重定向,但要使用用户在登录时使用的语言。
这是一个旧的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行为是否包括两次加载登录表单,而且,在任何情况下,如果有人对如何实现所需的重定向有任何建议,那就太好了。
提前感谢