Tout savoir sur WordPress
Tutoriel WordPress

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.

Cet article a été mis à jour il y a 4786 jours - Il n'est peut être plus à jour !

Article écrit par Jonathan B.

Jonathan est le co-fondateur de WP Media, startup connue pour être l’auteur de WP Rocket et Imagify. Il est aussi co-organisateur du WordCamp Lyon et Paris.

10 Commentaires

  1. Bonjour,
    Ceci est-il compatible multisites ?
    Mes utilisateurs conserveront-ils tout de même leurs données utilisateurs (nom, prénom, username ?)

    merci !

  2. 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 !

  3. Merci. Je vais me servir de cette astuce et l’adapter pour créer une connexion à l’aide du login OU de l’email.

    • @victor: Vous devez le mettre dans le fichier functions.php de votre thème