web-dev-qa-db-ja.com

登録時のユーザー名としてEメール

多くのユーザは、ユーザ名を使わずにwpサイトへの登録を許可したいと考えています。ただ電子メールを使っているだけです。

これは中核的な問題なので、解決策(トリック)はusernameをemailに置き換えることです。

Wpがユーザー名と登録のための電子メールを必要とするならば、我々は電子メール価値を得て、それをユーザー名価値に入れることができます。登録フォームには2つのフィールドがあります。

  1. あなたのEメール
  2. あなたのEメールを繰り返す

Wpの場合、実際のフィールドは次のようになるので、これはトリックです。1. username(あなたのメールアドレスとして)2.あなたのメールアドレス(あなたのメールアドレスとして)

しかし、別の問題があります。 @ (at)はusernameに使用できる文字ですか?

どうすればこれができますか?

functions.php fileにコードを挿入する必要がありますか。

add_action( 'wp_core_validate_user_signup', 'custom_validate_user_signup' );

function custom_validate_user_signup($result)
{
  unset($result['errors']->errors['user_name']);

  if(!empty($result['user_email']) && empty($result['errors']->errors['user_email']))
  {
    $result['user_name'] = md5($result['user_email']);
    $_POST['signup_username'] = $result['user_name'];
  }

  return $result;
}

前もって感謝します!

3
ste_yeu

ユーザ名に@.を使うことができるので、問題はありません。今、あなたはあなた自身の登録フォームを作成し、 register_new_user() を使うことができます。 wp_registration_url() をフィルタ register_url で操作することもできます。そのため、登録リンクは新しい登録ページを指します。

wp-login.php で提供されている標準インターフェースと一緒に使いたい場合は、いくつかの回避策が必要です。登録用のEメール入力フィールドを表示するだけでいいのですが、ユーザー名フィールドを次のように非表示にすることができます。

add_action( 'register_form', function() {
    ?><style>#registerform > p:first-child{display:none;}</style><?php
} );

サイドノート:login_enqueue_scriptsアクションを使ってスタイルシートを wp-login.php にエンキューすることも可能です。

しかし、そうすると空のユーザー名が送信されるので、 sanitize_uservalidate_usernameの2つのフィルターにフックする必要があります。

add_filter( 'sanitize_user', function( $sanitized_user, $raw_user, $strict ) {
    if ( $raw_user != '' ) {
        return $sanitized_user;
    }

    if ( ! empty ( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' && is_email( $_POST['user_email'] ) ) {
        return $_POST['user_email'];
    }

    return $sanitized_user;
}, 10, 3 );

add_filter( 'validate_username', function( $valid, $username ) {
    if ( $valid ) {
        return $valid;
    }

    if ( ! empty ( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' && is_email( $_POST['user_email'] ) ) {
        return true;
    }

    return is_email( $username );
}, 10, 2 );

sanitize_userでは、空の文字列を電子メールアドレスに置き換えます。後でユーザー名はvalidate_usernameで検証されますが、ここでも空のユーザー名が使用されるので、これもキャッチする必要があります。

しかし、私は自分自身のフォームを作成することが優先され、ハックが少なくなると思います。

3
websupporter

これが私が使ったものです:

jQuery(document).ready(function($){
    // hide the username field.
    $('input#user_login').parent().parent().hide();
    // force username to mirror the input of the email field
    $('input#email').on('change',function(){
        $('#user_login').val($(this).val());
    });
});

素敵でシンプルです。

2
squarecandy

これをfunctions.php(または他のphpファイル)に追加してください:

add_action('login_footer', function() {
?><script type="text/javascript">
    document.querySelector('input#user_login').parentElement.hidden = true ;
    document.querySelector('input#user_email').onchange = function(){
        document.querySelector('input#user_login').value = this.value ;
    } ;
</script><?php
} );

アクションはwp-login.phpの "フッター"にスクリプトを表示します。 JavaScriptは "user_login"ラベルと入力を隠し、その値を電子メール入力値で設定します。

1
Fred Autier