2012-07-13 48 views
0

我試圖找到一種方法來防止登錄屏幕出現,當用戶填寫登錄表單時出現錯誤。重定向遠離登錄頁

所以,現在,我已將登錄表單打印在自定義模板上。但是,如果用戶填寫錯誤,則會將其重定向到wordpress表單以再次嘗試。我想重新定位。

這是我有的代碼,但它不工作。

add_action('login_form', 'redirect_invalid_login'); 

function redirect_invalid_login(){ 
    global $error; 

    if($error) 
     header('Location: '.get_bloginfo('url').'/client-login/?message=6'); 
} 

現在login_form太遲了我相信因爲東西已經打印到頁面上了。我一直無法找到一個有效的鉤子。有沒有這個鉤子?或者可能採取不同的方式來做到這一點?

+0

'它重定向他們到WordPress的形式嘗試again'是不是設計的行爲?你爲什麼想改變它? – JimmyPena 2012-07-13 19:57:00

+0

我正在構建一個網站,用戶應該無權訪問wordpress後端,或者根本看不到任何後端。所以我做了它,所以WordPress的登錄表單在模板頁面 – jasonaburton 2012-07-13 20:12:38

+0

如果他們犯了一個錯誤,我希望他們留在該表格上,而不是重定向 – jasonaburton 2012-07-13 20:14:37

回答

1

好了,所以這裏是解決方案:

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').'/client-login/?message=6'); 
    } 
    else if($user->errors['empty_username']){ 
     wp_redirect(get_bloginfo('url').'/client-login/?message=7'); 
    } 
    else if($user->errors['invalid_username']){ 
     wp_redirect(get_bloginfo('url').'/client-login/?message=8'); 
    } 
    else if($user->errors['incorrect_password']){ 
     wp_redirect(get_bloginfo('url').'/client-login/?message=9'); 
    } 
    else{ 
     wp_redirect(get_bloginfo('url').'/client-login'); 
    } 

    exit; 
} 
0

你可以試試這個

add_action('wp_login_failed', 'redirect_invalid_login'); 
function redirect_invalid_login() { 
     wp_redirect(get_bloginfo('url').'/client-login/?message=6'); 
     exit; 
} 
+0

這讓我有一半的方式。只有在填寫了兩個字段的情況下才有效。但是,如果你只填寫密碼或用戶名字段,那麼它仍然會把你踢到wordpress的頁面。我做了一些研究,wp_authenticate是一個可插入的函數,所以我將試一試,看看它是什麼。 – jasonaburton 2012-07-16 15:00:57

+0

當然,請讓我知道你得到了什麼。謝謝:-) – 2012-07-16 15:11:58

+0

你知道是否有鉤子檢查單個字段嗎? – jasonaburton 2012-07-16 15:13:30