web-dev-qa-db-fra.com

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

Je me demande comment puis-je 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 l'afficheur uniquement. Je veux qu'ils soient aussi sur une autre URL.

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

3
Sayroose

Réponse sur le sujet:

Vous pouvez simplement insérer <?php wp_login_form(); ?> dans l’un de vos modèles de thème pour afficher un formulaire de connexion au début de votre site.

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

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

add_shortcode( 'loginform', 'wpse_242473_login_form' );
1

Il existe la fonction wp_login_form( [ /* array of arguments */ ] ) , qui affiche un formulaire de connexion que vous pouvez insérer dans chaque modèle. Lorsque vous examinez les éléments internes, vous verrez que les actions des formulaires ont pour objectifs:

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

… (Du moins si vous n'avez pas utilisé l'argument $args['redirect']). Cela signifie que wp-login.php gère la connexion. Maintenant, vous avez 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, telles que redirect, qui par défaut pointe vers le site actuel:

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

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

     apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user );
    
  2. Vous grattez cette idée car vous ne pouvez pas déterminer la différence entre un admin et un guest car vous ne connaissez pas le rôle d’un utilisateur before ils se sont connectés.

0
kaiser

Pour un formulaire d’utilisateur de registre personnalisé, vous pouvez utiliser 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 m'accrochant au filtre acf/pre_save_post et en procédant comme suit:

  • désinfecter les intrants
  • enregistrer l'utilisateur avec register_new_user(), qui gère la génération de mot de passe et la notification par courrier électronique
  • utilisez wp_update_user() et update_user_meta() pour mapper les champs ACF personnalisés appropriés aux champs personnalisés du profil utilisateur WP
  • définir le nouveau rôle de l'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' );
0
davemac