web-dev-qa-db-fra.com

Connexion avec email (connexion WP Modal)

J'essaie de créer ce plugin pour utiliser le courrier électronique de l'utilisateur pour se connecter, par opposition à Nom d'utilisateur.

Le plugin est http://wordpress.org/plugins/wp-modal-login/

Y a-t-il une bonne façon de faire cela, peut-être par un filtre pour que ce plugin fonctionne avec les identifiants de messagerie?

J'ai essayé d'utiliser ce filtre:

function custom_login() {
  $data = array();        
  $data['user_login']     = sanitize_user( $_REQUEST['username'] );
  $data['user_email']     = sanitize_user( $_REQUEST['user_email'] );
  $data['user_password']  = sanitize_text_field( $_REQUEST['password'] );
  $data['rememberme']     = sanitize_text_field( $_REQUEST['rememberme'] );
  $data['user_login']     = sanitize_user( $_REQUEST['user_email'] );
  $user = wp_signon( $creds, false );
  if ( is_wp_error($user) )
    echo $user->get_error_message();
}
// run it before the headers and cookies are sent
add_action( 'after_setup_theme', 'custom_login' );
2
SMacFadyen

J'utilise cette action simple, et cela fonctionne comme un charme. :)

<?php
/** Plugin Name: (#111223) User Login with Mail Address */
    add_action( 'wp_authenticate', 'wpse111223_login_with_email_address' );
function wpse111223_login_with_email_address( $username ) {
    $user = get_user_by_email( $username );
    if ( ! empty( $user->user_login ) )
        $username = $user->user_login;

    return $username;
}

Il se connecte à wp_authenticate et permet la connexion par courrier électronique au système d'authentification WordPress, de sorte qu'il devrait fonctionner avec n'importe quel plugin. Je l'utilise avec succès avec Login avec le plugin Ajax .

:)

Later-edit: Pour ceux qui ne savent pas où placer le fragment de code, il devrait aller dans le functions.php de votre thème ou dans un plugin personnalisé.

5
Eek

J'utilise cette méthode de base pour activer la connexion par courrier électronique, semblable à une autre réponse, mais je pense qu'il est plus propre de tester d'abord:

add_filter( 'authenticate', 'custom_allow_email_login', 20, 3);
function custom_allow_email_login( $user, $username, $password )
{
    if ( is_email($username) )
    {
        $user = get_user_by_email( $username );
        if ( $user ) $username = $user->user_login;
    }
    return wp_authenticate_username_password( null, $username, $password );
}

Malheureusement, si vous souhaitez modifier le libellé du formulaire, vous devez utiliser Javascript ou créer votre propre page de connexion, avec son propre formulaire personnalisable.

Utiliser Javascript:

add_action( 'login_enqueue_scripts', 'custom_login_enqueue_scripts' );
function custom_login_enqueue_scripts()
{
    wp_enqueue_script('jquery');
}
add_action( 'login_form', 'custom_change_username' );
function custom_change_username()
{
    echo "\n" . '
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            $("label").html(function(index,html){
                return html.replace("Username", "Username or Email");
            });
        });
    </script>' . "\n";
}

Et vous pouvez utiliser wp_login_form pour inclure un formulaire de connexion sur votre propre page.

0
Jake