問題描述

我有一個自定義登錄頁面在 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。