web-dev-qa-db-ja.com

Eメールでログインする(WPモーダルログイン)

Usernameではなく、ログインにユーザーの電子メールを使用するためにこのプラグインをフォークしようとしています。

プラグインは http://wordpress.org/plugins/wp-modal-login/ です。

これを実行するための良い方法はありますか?おそらく、このプラグインを電子メールの認証情報で機能させるためのフィルタによる方法でしょうか。

私はこのフィルタを使ってみました:

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

私はこの単純な行動を使っています、そしてそれは魅力のように働きます。 :)

<?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;
}

これはwp_authenticateにフックし、WordPress認証システムへの電子メールログインを有効にするので、どのプラグインでも動作するはずです。私はAjaxプラグインでログインしてうまく使用します。

:)

後で編集する:どこにコードの断片を置くべきかわからない人のために、それはあなたのテーマのfunctions.phpまたはカスタムプラグインに入れるべきです。

5
Eek

私はこの基本的な方法を使用して電子メールログインを有効にします。他の回答と同様ですが、最初にテストする方がきれいだと思います。

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 );
}

残念ながら、フォームのラベルを変更したい場合は、Javascriptを使用するか、独自のカスタマイズ可能なフォームを使用して独自のログインページを作成する必要があります。

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";
}

また、 wp_login_form を使用して、自分のページにフォームにログインを含めることもできます。

0
Jake