Se connecter avec son adresse email sur WordPress
Par défaut, la connexion à l’administration de WordPress se fait par le couple pseudo/mot de passe. Découvrez la démarche à suivre pour se connecter à l’administration grâce à notre adresse email en plus de notre pseudo.
De base, la connexion sur un site réalisé avec WordPress se fait avec le pseudo et le mot de passe. Parfois, nous pouvons avoir besoin de proposer à nos membres de se connecter avec leur adresse email en plus du pseudo.
En fouillant un peu dans le code source de WordPress, on s’aperçoit qu’il se sert du filtre authenticate
présent dans la fonction wp_authenticate()
qui est utilisée pour l’authentification du membre.
Ce filtre utilise la fonction wp_authenticate_username_password()
qui permet de renvoyer les données du membre.
Notre astuce va se faire en deux étapes :
- détruire le filtre
authenticate
- créer un nouveau filtre
authenticate
avec notre système d’authentification
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]
// On commence par détruire le mode d'authentification de WordPress
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
// On recrée le mode d'authentification de WordPress avec notre fonction
add_filter( 'authenticate', 'email_and_login_authenticate', 20, 3 );
function email_and_login_authenticate( $user, $username, $password ) {
if ( trim($username) != '' )
$user = get_user_by_email( $username );
if ( $user )
$username = $user->user_login;
return wp_authenticate_username_password( null, $username, $password );
}
[/pastacode]
Vous n’avez rien compris ? Pas de panique, je vous apporte quelques explications sur l’astuce.
On commence par vérifier si la variable $username
est vide ou non. Cette variable contient soit l’adresse email, soit le pseudo posté par le membre. Si la variable n’est pas vide (le membre a posté quelque chose), on essaye de récupérer les données du membre à partir de son adresse email.
La fonction get_user_by_email()
renvoie false si elle ne trouve aucun résultat. C’est pour cette raison que l’on teste ensuite si la variable $user
existe !
Si elle n’existe pas, cela peut signifier deux choses :
- l’adresse email précisée n’existe pas
- le membre a uniquement indiqué un pseudo et non une adresse email
Dans le cas où $user
existe, cela signifie que le membre a précisé une adresse email pour se connecter. Il convient alors de modifier $username
afin qu’il prenne la valeur du membre par rapport à l’adresse email fournie.
Pour terminer, on retourne le résultat de la fonction wp_authenticate_username_password
pour que WordPress puisse continuer son traitement pour l’authentification.
Et voilà, rien de plus à savoir ! Vos membres peuvent maintenant se connecter grâce à leur adresse email.
10 Commentaires
Bonjour,
Ceci est-il compatible multisites ?
Mes utilisateurs conserveront-ils tout de même leurs données utilisateurs (nom, prénom, username ?)
merci !
L’astuce ne modifie pas les comptes des utilisateurs. Il permet de se connecter à partir de leur adresse email en plus de la connexion par le pseudonyme.
En ce qui concerne le multi-site, je n’ai pas testé. Par contre, je sais que l’extension WP Email Login gère la connexion avec l’adresse email pour WP MU.
http://wordpress.org/extend/plugins/wp-email-login/
Merci beaucoup pour cette réponse rapide !
Je vais aller voir du côté du plugin alors ;)
Bonjour,
Merci pour l’astuce. Crois-tu qu’il est possible de permettre à un visiteur de s’inscrire en tant que membre uniquement avec son adresse mail (en supprimant le mot de passe) ?
Bonne journée !
@Tony: Je ne pense pas ;)
Bravo, je vais tester ca dessuite :D Merci c’est ce que je cherchai !!
Au top, un grand merci :)
Merci. Je vais me servir de cette astuce et l’adapter pour créer une connexion à l’aide du login OU de l’email.
c’est où que l’on marque tout ça svp merci
@victor: Vous devez le mettre dans le fichier functions.php de votre thème