2017-11-25 207 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我原本點擊電子郵件。最大的問題是,任何非主頁都會將我重定向到登錄屏幕。這意味着我的隨意讀者無法在家中的任何地方訪問我的網站。

當然這應該不那麼難。

相關問題