web-dev-qa-db-fra.com

La connexion personnalisée redirige vers wp-admin avec un mot de passe incorrect

Mon formulaire de connexion personnalisé est redirigé vers la connexion wp-admin lorsqu'un utilisateur n'arrive pas à deviner ses informations d'identification. Comment puis-je gérer la redirection de l'utilisateur vers le formulaire actuel? Et bien sûr montrer les bonnes erreurs?

Voici le code: (idem que sur le manuel WordPress)

$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 );
3
Roel Veldhuizen

Lors du codage d'une page de connexion personnalisée, vous devez vous occuper des erreurs, sinon WordPress redirigerait la page vers/wp-admin ou wp-login.php sur des mots de passe erronés ou des informations d'identification vides. Veuillez suivre les instructions ci-dessous pour résoudre ce problème: -

Veuillez utiliser ce qui suit dans le fichier functions.php de votre thème: -

/**
 * Function Name: front_end_login_fail.
 * Description: This redirects the failed login to the custom login page instead of default login page with a modified url
**/
add_action( 'wp_login_failed', 'front_end_login_fail' );
function front_end_login_fail( $username ) {

// 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( LOGIN_PAGE_ID ) . "?login=failed" ); 
    exit;
}

}

/**
 * Function Name: check_username_password.
 * Description: This redirects to the custom login page if user name or password is   empty with a modified url
**/
add_action( 'authenticate', 'check_username_password', 1, 3);
function check_username_password( $login, $username, $password ) {

// 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' ) ) { 
    if( $username == "" || $password == "" ){
        wp_redirect( get_permalink( LOGIN_PAGE_ID ) . "?login=empty" );
        exit;
    }
}

}
// Replace my constant 'LOGIN_PAGE_ID' with your custom login page id.

et ci-dessous dans le fichier de page de connexion personnalisé pour afficher les erreurs correspondantes: -

<div class="wp_login_error">
    <?php if( isset( $_GET['login'] ) && $_GET['login'] == 'failed' ) { ?>
        <p>The password you entered is incorrect, Please try again.</p>
    <?php } 
    else if( isset( $_GET['login'] ) && $_GET['login'] == 'empty' ) { ?>
        <p>Please enter both username and password.</p>
    <?php } ?>
</div>          
7
Maruti Mohanty

Avez-vous essayé de faire écho à la

site_url($_SERVER['REQUEST_URI'] );

celui-ci fonctionne bien, je l'ai utilisé avec succès

'redirect' => get_permalink()

Update Pour la redirection en cas d'échec de la connexion, vous devez utiliser wp_login_failed hook, ainsi que du code personnalisé permettant de rediriger l'utilisateur vers la page désirée avec le message d'avertissement approprié.

add_action('wp_login_failed', '_login_failed_redirect');

function _login_failed_redirect( $username ){

  //get your page by slug and then its permalink
  $post = get_page_by_path('slug');

  //Or you can get your page ID, if you are assigning a custom template to a page.
  $redirect_page = !empty ( $post ) ? get_permalink ( $post->ID ) : site_url();

  $user = get_user_by('login', $username );

  if(!$user){
    //Username incorrect
    wp_redirect($redirect_page .'?login_error=1');

  }else{
   //Username Password combination incoorect
    wp_redirect($redirect_page .'?login_error=2');
  }

}

Et si vous redirigez vers un modèle, vous pouvez facilement obtenir login_error et l'afficher en conséquence.

0
sven