多くのユーザは、ユーザ名を使わずにwpサイトへの登録を許可したいと考えています。ただ電子メールを使っているだけです。
これは中核的な問題なので、解決策(トリック)はusernameをemailに置き換えることです。
Wpがユーザー名と登録のための電子メールを必要とするならば、我々は電子メール価値を得て、それをユーザー名価値に入れることができます。登録フォームには2つのフィールドがあります。
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;
}
前もって感謝します!
ユーザ名に@
と.
を使うことができるので、問題はありません。今、あなたはあなた自身の登録フォームを作成し、 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_user
とvalidate_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
で検証されますが、ここでも空のユーザー名が使用されるので、これもキャッチする必要があります。
しかし、私は自分自身のフォームを作成することが優先され、ハックが少なくなると思います。
これが私が使ったものです:
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());
});
});
素敵でシンプルです。
これを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"ラベルと入力を隠し、その値を電子メール入力値で設定します。