web-dev-qa-db-fra.com

Rediriger vers une URL personnalisée lorsque l'enregistrement échoue?

Lorsque je souhaite rediriger l'utilisateur après une inscription réussie, j'utilise simplement le hook de filtrage "registration_redirect". Que diriez-vous lorsque l'enregistrement échoue, quel crochet de filtre dois-je utiliser? J'ai regardé dans wp-login.php mais je n'ai vu aucun crochet filtre/action que je puisse utiliser. Comment puis-je m'y prendre?

3
jilseego

Vous pouvez ajouter une redirection htaccess ou essayer le thème mon plugin de connexion: http://wordpress.org/extend/plugins/theme-my-login/ . Il a des options pour la redirection personnalisée.

1
Innate

Il existe une solution plus sophistiquée à la place de htaccess ou plugin. Pour ceux qui s'intéressent à ce sujet, il y a mon code à rediriger après (exactement avant) tentative de resitration infructueuse.

Pourquoi avant? Avant toute tentative d’inscription, WordPress recherche un nom d’utilisateur et une adresse électronique, s’ils ne sont pas vides, s'ils ne sont pas déjà dans la base de données et si l’adresse e-mail ou le nom d’utilisateur sont corrects. Si tel est le cas, il enregistre des erreurs et vous pouvez vous connecter à une fonction juste après cette vérification.

do_action( 'register_post', $sanitized_user_login, $user_email, $errors );

La prochaine étape - impossible à décrocher - consiste à essayer de créer un nouvel utilisateur. Si cela échoue, il y a un autre message d'erreur et vous serez redirigé vers l'écran standard wp_login.php.

Mais, il y a un mais. Ce processus, Étape suivante, appelle simplement wp_insert_user () et cette fonction échoue uniquement sur les commandes empty_user_login, existing_user_login et existing_user_email - sinon, elle se termine correctement. Et si vous avez lu attentivement, toutes ces variables sont vérifiées avant que cette fonction ne soit appelée (cette double vérification est logique car vous pouvez appeler wp_insert_user directement à partir de votre plugin).

Donc, si le processus d’enregistrement échoue après le raccordement mentionné, il échoue car il ya quelque chose qui ne va pas dans votre installation de WordPress et ainsi, ce n’est pas un échec de votre fonction de redirection accrochée au processus d’enregistrement.

Et enfin, un code pour ceux qui souhaitent simplement copier et coller un code de redirection vers une page personnalisée après l’échec de la connexion:

add_action('register_post', 'binda_register_fail_redirect', 99, 3);

function binda_register_fail_redirect( $sanitized_user_login, $user_email, $errors ){
    //this line is copied from register_new_user function of wp-login.php
    $errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );
    //this if check is copied from register_new_user function of wp-login.php
    if ( $errors->get_error_code() ){
        //setup your custom URL for redirection
        $redirect_url = get_bloginfo('url') . '/registrace';
        //add error codes to custom redirection URL one by one
        foreach ( $errors->errors as $e => $m ){
            $redirect_url = add_query_arg( $e, '1', $redirect_url );    
        }
        //add finally, redirect to your custom page with all errors in attributes
        wp_redirect( $redirect_url );
        exit;   
    }
}
8
david.binda