2015-06-26 7 views
12

Mam szablon do logowania przy pomocy funkcji wp_login_form(). Teraz Jeśli użytkownik wprowadzić błędne hasło lub nazwa użytkownika będzie przekierować mnie do tej samej strony z argumentem login=failed z następującego kodu:jak odzyskać błąd wp w niestandardowym formularzu logowania

add_action('wp_login_failed', 'front_end_login_fail'); 
function front_end_login_fail($username) { 

$_SESSION['uname'] = $username; 
// Getting URL of the login page 
$referrer = $_SERVER['HTTP_REFERER'];  
$login_failed_error_codes = array('empty_password', 'empty_email', 'invalid_email', 'invalidcombo', 'empty_username', 'invalid_username', 'incorrect_password'); 

// if there's a valid referrer, and it's not the default log-in screen 
if(!empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin')) { 
    wp_redirect(get_permalink(93) . "?login=failed"); 
    exit; 
} 

} 

Teraz ta funkcja działa ok, ale teraz jak za wordpress funkcjonalności, które zapewniają następujące:

1.Jeżeli użytkownik wchodzi prawda podając nazwę użytkownika, ale źle hasło pokaże błąd jako „incorrect_password”

2.Jeżeli użytkownik wchodzi fałszywy podając nazwę użytkownika, ale prawda hasło pokaże błąd jak „invalid_username”

3.Jeżeli użytkownik wchodzi źle podając nazwę użytkownika, ale źle hasło pokaże błąd jako "invalidcombo"

Dodaj itd proszę sprawdzić zmienne $ login_failed_error_codes w kodzie ... Zrobiłem trochę wyszukiwania. Mam klasę o nazwie "WP_error". Ale nie wiem, jak to działa z tym kodem.

Po prostu utknąłem w jak przekazać obiekt WP_error z wp-login.php do mojego szablonu csutom?

Dzięki ... każda pomoc byłaby przydatna.

Odpowiedz

6

Myślę, że rozumiem, co próbujesz osiągnąć. Chcesz być w stanie wyświetlić przyczynę niepowodzenia logowania na twojej własnej stronie logowania. Zakładam, że już wiesz, jak pobrać parametry $_GET, ponieważ używasz tego do przekazania parametru login_failed.

Użyj filtra login_redirect Zamiast:

add_filter('login_redirect', 'my_login_redirect', 10, 3); 
function my_login_redirect($redirect_to, $requested_redirect_to, $user) { 
    if (is_wp_error($user)) { 
     //Login failed, find out why... 
     $error_types = array_keys($user->errors); 
     //Error type seems to be empty if none of the fields are filled out 
     $error_type = 'both_empty'; 
     //Otherwise just get the first error (as far as I know there 
     //will only ever be one) 
     if (is_array($error_types) && !empty($error_types)) { 
      $error_type = $error_types[0]; 
     } 
     wp_redirect(get_permalink(93) . "?login=failed&reason=" . $error_type); 
     exit; 
    } else { 
     //Login OK - redirect to another page? 
     return home_url(); 
    } 
} 
+0

thx za odpowiedź pozwól mi sprawdzić – vrajesh

+0

działa dobrze..bravo, doskonała, dobra robota THX ... !!! – vrajesh

0

Wygląda following answer jest to, czego potrzebujesz:

Trzeba podpiąć pod wordpress hakiem uwierzytelnienia. Następnie zwróć nowy obiekt WP_Error , aby wygenerować komunikat o błędzie i przekierować ponownie na stronę logowania na stronę . Oto przykład.

add_filter('authenticate', 'check_login_submit', 40, 3); 

function check_login_submit($user, $username, $password) { 
    $WP_Error = new WP_Error(); 
    $WP_Error->add('my_error', '<strong>Error</strong>: Something went wrong.'); 
    return $WP_Error; 
} 
+0

Thx. do odpowiedzi, ale po prostu utknąłem w sposobie przekazywania obiektu WP_error z wp-login.php do mojego szablonu csutom? – vrajesh

+0

Nie musisz przekazywać obiektu. Po prostu prześlij komunikat o błędzie i kod błędu. Następnie możesz utworzyć nowy obiekt WP_Error w następujący sposób: '$ my_error = new WP_Error ('ErrorCode', 'ErrorMessage');' – Samuel

+0

jeśli to możliwe podaj przykład. – vrajesh

0

Jeśli utworzono szablon niestandardowy do logowania, a następnie Dlaczego nie używacie wp_signon metodę za pomocą formularza niestandardowego?. zwróci obiekt WP_error na false, a na true zwróci obiekt $ user.

<?php 
if(isset($_POST['submit'])){ 
     $creds = array(); 
     $creds['user_login'] = $_POST['user_email']; 
     $creds['user_password'] = $_POST['user_password']; 
     $creds['remember'] = true; 
     $user = wp_signon($creds, false); 
     if (is_wp_error($user)) 
      echo $user->get_error_message(); 
} 
?> 

<form id="user-credentials" method="post" action="<?php the_permalink(); ?>"> 
    <p><input name="user_email" type="text" placeholder="Email" /></p> 
    <p><input name="user_password" type="password" placeholder="Password" /></p> 
    <p><input type="submit" value="Submit" /></p> 
</form> 

Nie testowałem, ale powinno działać.

+0

thx .. realnie zarekomenduj swój wysiłek.Ale użyłem funkcji wp_login_form(). – vrajesh

0
function front_end_login_fail($username) { 
$set_confirm=0; 
$_SESSION['uname'] = $username; 
/*******Check whether user entered username or email to login*********/ 
if(is_email($username)){ 
     if(email_exists($username)) { 
      $uid = email_exists($username); 
      $confirm_mail =get_user_meta($uid,'confirm_mail',true); 
      if($confirm_mail!=1){ 
       $set_confirm=1; 
      } 
     } 
    //$user_check = get_user_by('email', $username); 
    //print_r($user_check); 

}else{ 

    if (username_exists($username)){ 
     $uid = username_exists($username); 
      $confirm_mail =get_user_meta($uid,'confirm_mail',true); 
      if($confirm_mail!=1){ 
       $set_confirm=1; 
      }  
    } 
} 
    //$user_check = get_user_by('user_login ', $username); 
    //print_r($user_check); 

// Getting URL of the login page 
$referrer = $_SERVER['HTTP_REFERER'];  


// if there's a valid referrer, and it's not the default log-in screen 
if(!empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin')) { 
    wp_redirect(get_permalink(93) . "?login=failed&confirm_email=".$set_confirm); 
    exit; 
} 

} 
add_action('wp_login_failed', 'front_end_login_fail'); 
+0

Ten fragment kodu określa "czy wprowadzono nazwę użytkownika lub e-mail do zalogowania", a następnie odpowiednio "& confirm_email = 1" lub "0" ... Nie rozwiązuje problemu, aby przekazać pełne komunikaty o błędach do niestandardowego skryptu . –

Powiązane problemy