問題描述

如果他們嘗試訪問任何其他頁面而不登錄,我有一個功能可以將用户重定向到登錄頁面 (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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。