it-swarm.com.de

Wie erstelle ich ein benutzerdefiniertes Anmelde-/Registrierungsformular mit Fehlerbehandlung?

Ich arbeite also an einem Plugin, in dem ich eine benutzerdefinierte Seite erstelle, die ein Anmeldeformular sowie eine für die Benutzerregistrierung enthält. Ich habe die Formulare erstellt und betriebsbereit, unten ist mein 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 -->

Dies funktioniert einwandfrei, abgesehen von der Tatsache, dass der Benutzer bei jeder Fehlermeldung zu wp-login.php umgeleitet wird. Ich benötige die Seite mit dem Formular, um alle Fehler mit AJAX zu behandeln. um eine bessere Benutzererfahrung zu geben. Was ist der beste Weg, um dies zu tun?

5
Designer 17

Schauen Sie sich das erste Formularelement an. Der Wert für action bestimmt, wohin die Formulardaten gesendet werden. Durch Ändern des Werts können Sie dem Formular einfach anweisen, zu sich selbst weiterzuleiten, anstatt zu einer anderen Seite.

Der Kodex bietet einen alternativen Ansatz zur Generierung des Aufschlags für das erforderliche Formular:

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

Hier ist ein viel ausführlicheres Tutorial:

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

Sie können jederzeit ein bereits existierendes beliebtes Ajax-basiertes Anmelde-Plugin verwenden oder verzweigen:

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

2
Clarus Dignus

Hier ist was ich tue. Verwenden Sie das Anmeldeformular, um sich anzumelden https://codex.wordpress.org/Function_Reference/wp_login_form

Nachfolgend finden Sie die Umleitungen zum Abmelden und die Behandlung von Anmeldefehlern. Dies hilft Ihnen bei der Anmeldung.

/** 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