問題描述

我有一個自定義登入頁面在 http://netballscoop.com/log-in/

當您填寫使用者名稱和密碼時,將重定向到上一頁,您完全可以。當您單擊 「登出」 時,將重定向到同一頁面。所以這一切都很好。

如果您將使用者名稱/密碼留空或出現錯誤,將導致您進入 wp-login 。為了防止這種情況,我使用了 https://stackoverflow.com/questions/11477107/redirect-away-from-login-page 的程式碼

add_action('login_redirect', 'redirect_login', 10, 3);
function redirect_login($redirect_to, $url, $user) {
if($user->errors['empty_password']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['empty_username']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['invalid_username']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['incorrect_password']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else{
    wp_redirect(get_bloginfo('url').'/log-in');
}
exit;
}

這對我的網站登入錯誤非常有用。但是現在,登入重定向會將您帶到 http://netballscoop.com/members/testing(使用者’Testing’ 是由他們的 BuddyPress 成員的個人資料頁面) 。

使用者登入時如何將其重定向到上一頁?

最佳解決方案

您可以過濾 login_redirect 功能,因此可根據需要進行調整。

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;
}

更新 1:

程式碼 (上面) 已經被修改並進行了測試 – 它的工作原理。

更新 2:(由 Tanya)

與 @userabuser 聊天,並提出了這個有效的答案。

// Redirect to previous page 
remove_all_filters('login_redirect', 99);
add_filter('bbp_user_login_redirect_to', 'function_name');

重要的提示:

事實證明,Tanya 正在使用 bbPress 論壇外掛,因此儘管使用了原始的片段,

add_filter('login_redirect', 'function_name'); //the standard WordPress API filter

這是正確的,並且在”normal” WordPress 條件下工作,在這種情況下被 bbPress 過濾器優先覆蓋,

add_filter('bbp_user_login_redirect_to', 'function_name'); //the bbPress API filter

現在,由於 bbPress.org 網站上的檔案詳細描述了這些操作和鉤子,組織方式有限,有些不完整 (據我所知),我建議 (任何人) 尋求進一步的資訊,瞭解哪些和什麼過濾什麼應該採取什麼看看這個資源,這裡提供了一個詳細的掛鉤和過濾器列表。

備註:(雜項)

更改'subscriber'以匹配您為該型別的使用者使用的角色。它也可以接受多個角色,因為它以陣列的形式。

in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。