我有一个WordPress网站,任何人都可以查看部分/大部分页面(未登录)。但是,用户可以请求拥有自己的私人页面,因此我设置了一个只能由该特定人员访问的页面,然后通过电子邮件将URL发送给他们。他们点击电子邮件中的URL,并通过登录链接发送他们的页面。登录成功后,我希望用户返回他们的私人页面,但目前他们只是在他们的个人资料页面上。
如何在登录后将用户重定向到其私人页面?
我已经尝试了很多不同的代码,但没有一个适用于这种情况。
我目前的代码如下。但这只是将用户发送回登录页面(即使登录成功)。
// Function to redirect after login
add_filter('login_redirect', 'redirect_previous_page', 10, 1);
function redirect_previous_page( $redirect_to ){
global $user;
$request = $_SERVER["HTTP_REFERER"];
if ( in_array( $user->roles[0], array( 'administrator') ) ) {
return admin_url();
} elseif ( in_array( $user->roles[0], array( 'subscriber') ) ) {
return $request;
}
return $redirect_to;
}
答案 0 :(得分:1)
如果您使用主页上的登录链接转到登录页面,请使用以下代码,
echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] );
如果您在首页上使用自定义表单,那么请确保使用要重定向的网址填写隐藏字段
<input type="hidden" name="redirect_to" value="<?php echo $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>" />
如果您使用wp_login_form()生成表单,请按照以下代码,有关详情,请查看此页面wp_login_form
$args = array(
'echo' => true,
'redirect' => site_url( $_SERVER['REQUEST_URI'] ),
'form_id' => 'loginform',
'label_username' => __( 'Username' ),
'label_password' => __( 'Password' ),
'label_remember' => __( 'Remember Me' ),
'label_log_in' => __( 'Log In' ),
'id_username' => 'user_login',
'id_password' => 'user_pass',
'id_remember' => 'rememberme',
'id_submit' => 'wp-submit',
'remember' => true,
'value_username' => NULL,
'value_remember' => false );
wp_login_form( $args );
答案 1 :(得分:0)
如您所知,您要将用户重定向到的页面可以明确地执行此操作,而不是获取HTTP_REFERER。使用in_array()函数检查用户的角色也更可靠。
试试这个:(您需要添加自己的逻辑来获取用户的私人页面,该示例假定每个用户页面的网址为yoursite.com/user/john)
function redirect_previous_page( $redirect_to, $request, $user ) {
if ( is_wp_error( $user ) ) { return $redirect_to; }
if ( is_array( $user->roles ) && in_array( 'administrator', $user->roles ) ) {
return admin_url();
} else if ( is_array( $user->roles ) && in_array( 'subscriber', $user->roles ) ) {
return site_url() . '/users/' . $user->user_login; // Add your logic here
} else {
return $redirect_to;
}
}
add_filter( 'login_redirect', 'redirect_previous_page', 10, 3 );
这是一个更深入地介绍它的教程。 https://tommcfarlin.com/redirect-non-admin/
另一个完全讨论此问题的stackoverflow线程:Redirect after Login on Wordpress
答案 2 :(得分:0)
到目前为止,我发现的最佳代码如下(尽管我有一个很大的缺陷):
// Function to redirect after login (best so far)
function redirect_after_login(){
global $wp;
$protocol='http';
if (isset($_SERVER['HTTPS']))
if (strtoupper($_SERVER['HTTPS'])=='ON')
$protocol='https';
if (!is_user_logged_in() && !is_home() && ($wp->query_vars['pagename'] != 'downloads') ){
$redirect = home_url() . "/wp/wp-login.php?redirect_to= $protocol://" .
$_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]);
wp_redirect( $redirect );
exit;
}
}
add_action( 'wp', 'redirect_after_login', 3 );
当我点击电子邮件中的链接时,此代码非常有用 - 在这种情况下,我会转到登录屏幕,然后转到我最初在电子邮件中点击的页面网址。最大的问题是任何非主页也会将我重定向到登录屏幕。这意味着我的休闲读者无法访问我的网站,除了家庭。
当然,这不应该那么难。