WordPress : Comment créer une page de connexion spécifique pour un utilisateur spécifique ?
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.php
gère la connexion. Vous avez maintenant plusieurs options :
-
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, commeredirect
, 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 );
-
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_post
filtre 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()
etupdate_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' );
0 commentaire