WordPress : Comment créer une page de connexion spécifique pour un utilisateur spécifique ?

Publié par Jean-Michel le

Je me demande comment créer deux pages de connexion distinctes pour deux utilisateurs spécifiques ?

Disons, par exemple : J’ai deux utilisateurs sur mon site. Admin et spectateur.

Sur l’interface de mon site, je souhaite créer deux pages de connexion différentes. Un formulaire de connexion pour l’administrateur uniquement et un formulaire de connexion pour le spectateur uniquement. Je veux qu’ils soient sur une URL différente aussi.

J’espère que vous pourrez m’aider avec ce problème. Merci!

Solution n°1 trouvée

Il y a la fonction wp_login_form( [ /* array of arguments */ ] ), qui affiche un formulaire de connexion que vous pouvez mettre dans chaque modèle. Lorsque vous regardez les composants internes, vous verrez que l’action des formulaires pointe vers :

esc_url( site_url( 'wp-login.php', 'login_post' ) )

…(du moins si vous n’avez pas utilisé l’ $args['redirect']argument). Cela signifie que wp-login.phpgère la connexion. Vous avez maintenant plusieurs options :

  1. Vous pouvez utiliser les arguments de la fonction ou définir globalement le filtre login_form_defaults, ce qui vous permet de modifier les valeurs par défaut, comme redirect, qui par défaut pointe vers le site actuel :

    ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],
    

    Ensuite, vous pouvez utiliser un filtre pour rediriger en fonction du rôle (ou effectuer une déconnexion si le rôle de l’utilisateur connecté ne correspond pas au rôle que vous souhaitez autoriser à se connecter à partir de ce modèle) :

     apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user );
    
  2. Vous rayez cette idée car vous ne pouvez pas déterminer la différence entre un administrateur et un invité car vous ne connaissez pas le rôle d’un utilisateur avant qu’il ne se connecte.

Solution n°2 trouvée

Réponse sur le sujet :

Vous pouvez simplement mettre <?php wp_login_form(); ?>dans l’un de vos modèles de thème pour afficher un formulaire de connexion sur le front-end de votre site.

Ou créez votre propre shortcode [loginform]en le mettant dans votre thème functions.php:

function wpse_242473_login_form() {
    return wp_login_form( 'echo' => false );
}

add_shortcode( 'loginform', 'wpse_242473_login_form' );

Solution n°3 trouvée

Pour un formulaire utilisateur de registre personnalisé, vous pouvez utiliser les champs personnalisés avancés pour créer un formulaire frontal.

Vous pouvez configurer les champs personnalisés pour l’enregistrement à l’aide d’ACF et définir les règles d’emplacement pour le groupe de champs lorsque User Form est égal à Register et Add/Edit.

J’ai fait quelque chose de similaire, en me connectant au acf/pre_save_postfiltre et en procédant comme suit :

  • désinfecter les entrées
  • enregistrer l’utilisateur avec register_new_user(), qui gère la génération du mot de passe et la notification par e-mail
  • utilisez wp_update_user()et update_user_meta()pour mapper les champs ACF personnalisés appropriés aux champs de profil utilisateur WP personnalisés
  • définir le rôle du nouvel utilisateur
  • utiliser wp_mail()pour envoyer un e-mail à l’administrateur si nécessaire

Quelques informations supplémentaires sur l’enregistrement d’un utilisateur auprès d’ACF ici.

function my_pre_save_user( $post_id ) {

    // If we have an email address, add the user
    // This field only exists in the new user field group
   if ( isset($_POST['acf']['add acf_field_ID here']) && !empty($_POST['acf']['add acf_field_ID here'])) {

        // sanitize our inputs
        $sanitized_email = sanitize_email( $_POST['acf']['add acf_field_ID here'] );
        $sanitized_firstname = sanitize_text_field( $_POST['acf']['add acf_field_ID here'] );
        $sanitized_lastname = sanitize_text_field( $_POST['acf']['add acf_field_ID here'] );
        $sanitized_contactnumber = sanitize_text_field( $_POST['acf']['add acf_field_ID here'] );

        // Prepare basic user info
        $username = $sanitized_email;
        $email = $sanitized_email;
        $display_name = $sanitized_firstname .' '. $sanitized_lastname;

         // Register the user and store the ID as $user_id, handles the validation, generates random password and send email notification to user
        $user_id = register_new_user( $username, $email );

        // If we get an error (eg user already exists)
        if( is_wp_error( $user_id ) ) {
            // Show the error
            echo 'Error: '.$user_id->get_error_message();
            // Exit
            exit;

        // Good to go
        } else {

            // get single value from post object
            $dmc_get_company_field = $_POST['acf']['add acf_field_ID here'];
            $dmc_selected_exhibitor = get_field( $dmc_get_company_field );

            // Update the new user's info
            wp_update_user( array(
                'ID' => $user_id,
                'first_name'  => $sanitized_firstname,
                'last_name'  => $sanitized_lastname,
                'display_name'  => $display_name
            ));

            // update the new users's meta
            update_user_meta( $user_id, 'dmc_exhibitor_company_name', $dmc_get_company_field  );
            update_user_meta( $user_id, 'dmc_exhibitor_contact_number', $sanitized_contactnumber );

            // update user role
            $user_id_role = new WP_User( $user_id );
            $user_id_role->set_role( 'contributor' );
            $profile_link = get_edit_user_link( $user_id );

            $to = "[add email addresses here]";
            $headers[] = 'MIME-Version: 1.0';
            $headers[] = 'Content-Type: text/html; charset=UTF-8';
            $headers[] = 'Reply-To: '. $username. ' <'. $email .'>';

            $subject = "[add email subject here]";
            $body = "[add email body here]";

            // send the email
            wp_mail( $to, $subject, $body, $headers );

            // redirect to thankyou page
            $redirect_url = get_bloginfo('url') . '[add URL to redirect to here]';
            wp_redirect( $redirect_url );

            // exit this script
            exit;

        }

    } else {
        return $post_id;
    }

}
add_filter('acf/pre_save_post' , 'my_pre_save_user' );

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *