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 );
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>
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.