2017-11-25 285 views
0

我有一个WordPress网站,任何人都可以查看某些/大多数网页(未登录)。但是,用户可以请求拥有自己的专用页面,因此我设置了一个只能由特定人员访问的页面,然后通过电子邮件将URL发送给他们。他们点击电子邮件中的URL并通过登录链接发送他们的页面。一旦登录成功,我希望用户回到他们的私人页面,但目前他们只是在他们的个人资料页面结束。如何在登录后将WordPress用户重定向到上一页

如何在登录后将用户重定向到他们的私人页面?

我已经尝试了很多不同的代码位,但没有一个适用于这种情况。

我目前的代码如下。但是这只是将用户返回到登录页面(即使登录成功)。

// 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

如您所知,您将重定向用户的页面可以显式执行,而不是获取HTTP_REFERER。使用in_array()函数检查用户的角色也更加可靠。

试试这个:(你将需要添加自己的逻辑来获取用户的私人页面,该示例假设URL为每个用户的页面是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/

而另一计算器线程哪里这个问题的深入讨论:Redirect after Login on Wordpress

+0

感谢您的支持。不幸的是,它不适用于我的用例。每个用户都有自己的专用页面,因此重定向到通用页面将无济于事。我怎么才能重定向到上一页? – timhuk

+0

使用http_referer的问题是它将重定向到最后一页,当调用此函数时,最后一页是登录页面。所以你最终将用户发送回登录屏幕。用户私人页面的网址是什么?我改变了上面的例子,举一个你可以做什么的更好的例子 –

+0

私人网页的网址类似于:mysite.co.uk/?page_id=77。每个用户一页。 – timhuk

0

如果使用在主页上登录链接转到登录页面,然后使用下面的代码,

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

​​
0

到目前为止,我已经找到了最好的代码如下(虽然有在这1个大缺陷对我来说):当我点击从电子邮件中的链接

// 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); 

此代码的伟大工程 - 在这种情况下,我引导到登录界面,然后在页面URL我原本点击电子邮件。最大的问题是,任何非主页都会将我重定向到登录屏幕。这意味着我的随意读者无法在家中的任何地方访问我的网站。

当然这应该不那么难。

相关问题