[英]How to redirect WordPress user to previous page after login
我有一個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;
}
如果您使用首頁上的登錄鏈接轉到登錄頁面,請使用以下代碼,
echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] );
如果您在首頁上使用自定義表單,請在內確保使用url填寫隱藏字段以進行重定向
<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 );
如您所知,您將要重定向用戶到的頁面可以顯式執行,而不必獲取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/
另一個徹底討論了此問題的stackoverflow線程: 在Wordpress上登錄后重定向
到目前為止,我發現的最好的代碼如下(盡管對我來說這有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。 最大的問題是,任何非主頁也會將我重定向到登錄屏幕。 這意味着我的隨便的讀者只能在家里瀏覽我的網站。
當然,這應該沒那么難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.