問題描述
如果他們嘗試訪問任何其他頁面而不登入,我有一個功能可以將使用者重定向到登入頁面 (home),這是它的工作原理:
function restrict_access_if_logged_out(){
if (!is_user_logged_in() && !is_home()){
wp_redirect( get_option('home') );
}
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );
真的很簡單,工作正常,問題是我需要將它們重定向到他們成功登入後試圖去的 URL,就像 WordPress 後端一樣。
有沒有辦法做到這一點?提前致謝!
最佳解決方案
你可以輕鬆地做到這一點。您只需要指定一個重定向引數。如果您在主頁上使用登入連結進入登入頁面,那麼 @ sisir 的解決方案是正確的。
<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ); ?>
如果您在首頁上使用自定義表單,那麼在<form>
中,請確保您使用該 URL 重寫一個隱藏的欄位
<input type="hidden" name="redirect_to" value="<?php echo $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>" />
並且如果您使用 wp_login_form()
生成表單,則填寫引數 – http://codex.wordpress.org/Function_Reference/wp_login_form
<?php
$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 );
?>
根據您有或需要更改其他引數。
次佳解決方案
嘗試透過 the_permalink()
作為 $redirect
引數:
function restrict_access_if_logged_out(){
if (!is_user_logged_in() && !is_home()){
wp_redirect( the_permalink() );
}
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );
編輯:
對不起,原來你誤會了你的問題。嘗試這個:
function restrict_access_if_logged_out(){
if (!is_user_logged_in() && !is_home()){
$redirect = home_url() . '/wp-login.php?redirect_to=' . urlencode( $_SERVER['REQUEST_URI'] );
wp_redirect( $redirect );
exit;
}
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );
注意:正確使用 wp_redirect()
通常需要新增 exit;
,我已經新增到我的第二個例子。
第三種解決方案
感謝所有,我使用了一些大家推薦的,所以最終我的程式碼看起來像這樣:
function restrict_access_if_logged_out(){
if (!is_user_logged_in() && !is_home()){
wp_redirect( get_option('home') . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) );
}
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );
在我的登入表單上 (我正在使用我的登入表單感謝 @Ashfame 讓我知道關於 wp_login_form 我不知道是否存在) 我新增這個使用者憑證是正常的,他們準備好登入:
if (isset($_REQUEST['redirect_to'])){
wp_redirect($_REQUEST['redirect_to']);
} else {
wp_redirect(get_bloginfo('url') . '/groups/');
}
非常感謝您的幫助,我投了贊成票!
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。