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' );
私はこの単純な行動を使っています、そしてそれは魅力のように働きます。 :)
<?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
またはカスタムプラグインに入れるべきです。
私はこの基本的な方法を使用して電子メールログインを有効にします。他の回答と同様ですが、最初にテストする方がきれいだと思います。
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 を使用して、自分のページにフォームにログインを含めることもできます。