web-dev-qa-db-fra.com

Comment créer un formulaire de connexion/enregistrement personnalisé avec gestion des erreurs?

Je travaille donc sur un plugin dans lequel je crée une page personnalisée contenant un formulaire de connexion ainsi qu’un formulaire d’enregistrement d’utilisateur; J'ai les formulaires construits et opérationnels, ci-dessous est mon code.

<!-- Begin login form -->               
<form name="loginform" id="login_form" class="login_form" action="<?php echo esc_url( wp_login_url() ); ?>" method="post">

    <p>
        <input type="text" name="log" id="user_login" class="input" placeholder="Username" />
    </p>

    <p>
        <input type="password" name="pwd" id="user_pass" class="input" placeholder="Password" />
    </p>

    <button name="wp-submit" id="wp-submit" class="btn"><?php _e("Sign in", "shorti"); ?></button>

    <input type="hidden" name="redirect_to" value="<?php echo $_SERVER["REQUEST_URI"]; ?>" />

</form>
<!-- end login form -->

<!-- Begin registration form -->
<form method="post" id="register_form" class="wp-user-form" action="<?php echo site_url('wp-login.php?action=register', 'login_post') ?>">

    <p><!-- Username -->
        <input type="text" name="user_login" id="user_login" class="input" placeholder="username" />
    </p>

    <p><!-- Email to send p/w to -->
        <input type="email" name="user_email" id="user_email" class="input" placeholder="email address" />
    </p>

    <p class="small-text">You will receive an email with a generated password<br />(which you can change in your "user settings")</p>

    <?php do_action('register_form'); ?>
    <button name="wp-submit" id="wp-submit" class="btn"><?php _e("Register!", "shorti"); ?></button>
    <?php $register = $_GET['register']; if($register == true) { echo '<p>Check your email for the password!</p>'; } ?>
    <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>?register=true" />
    <input type="hidden" name="user-cookie" value="1" />

</form><!-- end registration-form -->

Cela fonctionne bien à côté du fait que chaque fois qu'il y a un message d'erreur, il redirige l'utilisateur vers wp-login.php. J'ai besoin de la page avec le formulaire pour gérer toutes les erreurs avec AJAX; afin de donner une meilleure expérience utilisateur. Quelle est la meilleure façon de s'y prendre?

5
Designer 17

Regardez l'élément de formulaire d'ouverture. La valeur de l'action détermine l'emplacement de publication des données du formulaire. En modifiant la valeur, vous pouvez simplement indiquer au formulaire de se rediriger vers lui-même plutôt que vers une autre page.

Le codex offre une approche alternative pour générer la majoration de la forme nécessaire:

http://codex.wordpress.org/Customizing_the_Login_Form#Make_a_Custom_Login_Page

Voici un tutoriel beaucoup plus détaillé:

http://digwp.com/2010/12/login-register-password-code/

Vous pouvez toujours simplement utiliser ou utiliser un plug-in de connexion basé sur Ajax déjà existant:

http://wordpress.org/plugins/login-with-ajax/

2
Clarus Dignus

Voici ce que je fais. Utilisez le formulaire de connexion pour créer login https://codex.wordpress.org/Function_Reference/wp_login_form

Vous trouverez ci-dessous les redirections de connexion et la gestion des erreurs de connexion. Cela vous aidera avec le problème de connexion.

/** Login Redirect
 * Redirect user after successful login.
 *
 * @param string $redirect_to URL to redirect to.
 * @param string $request URL the user is coming from.
 * @param object $user Logged user's data.
 * @return string
 */
function my_login_redirect( $redirect_to, $request, $user ) {
    //is there a user to check?
    global $user;
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
        //check for admins
        if ( in_array( 'administrator', $user->roles ) ) {
            // redirect them to the default place
            return home_url('/wp-admin/');
        } else {
            return home_url();
        }
    } else {
        return $redirect_to;
    }
}

/*Login Error Handle*/
add_action( 'wp_login_failed', 'aa_login_failed' ); // hook failed login

function aa_login_failed( $user ) {
    // check what page the login attempt is coming from
    $referrer = $_SERVER['HTTP_REFERER'];

    // check that were not on the default login page
    if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') && $user!=null ) {
        // make sure we don't already have a failed login attempt
        if ( !strstr($referrer, '?login=failed' )) {
            // Redirect to the login page and append a querystring of login failed
            wp_redirect( $referrer . '?login=failed');
        } else {
            wp_redirect( $referrer );
        }

        exit;
    }
}

/*Login Empty Fields Error handling*/
add_action( 'authenticate', 'pu_blank_login');

function pu_blank_login( $user ){
    // check what page the login attempt is coming from
    $referrer = $_SERVER['HTTP_REFERER'];

    $error = false;

    if($_POST['log'] == '' || $_POST['pwd'] == '')
    {
        $error = true;
    }

    // check that were not on the default login page
    if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') && $error ) {

        // make sure we don't already have a failed login attempt
        if ( !strstr($referrer, '?login=failed') ) {
            // Redirect to the login page and append a querystring of login failed
            wp_redirect( $referrer . '?login=failed' );
        } else {
            wp_redirect( $referrer );
        }

    exit;

    }
}

/*Logout Redirect*/
add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );

function go_home(){
  wp_redirect( home_url('/login/') );
  exit();
}
add_action('wp_logout','go_home');
0
Ahmad Awais