登録ページからusernameフィールドを削除することは可能ですか?
ユーザーに自分の電子メールとパスワードだけを入力してもらいたいのです。
新しいユーザーは、これら2つのパラメーターのみに基づいて作成されるべきです。
それは可能ですか?
絶対にYES、あなたはこれを達成することができます。
規則1: WordPressはユーザー名を要求します。ユーザー名を入力してください。
規則2: WordPressのコアコードを編集しないでください。
これを実現するには、ユーザー名フィールドを非表示にし、電子メールを受信してユーザー名として保存します。
ステップ-1:ユーザー名の削除textfield
add_action('login_head', function(){
?>
<style>
#registerform > p:first-child{
display:none;
}
</style>
<script type="text/javascript" src="<?php echo site_url('/wp-includes/js/jquery/jquery.js'); ?>"></script>
<script type="text/javascript">
jQuery(document).ready(function($){
$('#registerform > p:first-child').css('display', 'none');
});
</script>
<?php
});
ステップ2:ユーザー名の削除エラー
//Remove error for username, only show error for email only.
add_filter('registration_errors', function($wp_error, $sanitized_user_login, $user_email){
if(isset($wp_error->errors['empty_username'])){
unset($wp_error->errors['empty_username']);
}
if(isset($wp_error->errors['username_exists'])){
unset($wp_error->errors['username_exists']);
}
return $wp_error;
}, 10, 3);
Step-3:背景登録機能を操作する
add_action('login_form_register', function(){
if(isset($_POST['user_login']) && isset($_POST['user_email']) && !empty($_POST['user_email'])){
$_POST['user_login'] = $_POST['user_email'];
}
});
あなたのテーマの functions.php ファイルに上記のコードを入れてください。
これを実現するための完全なプラグインをダウンロードすることもできます。
ログインは私たちが実際に削除したいものであるので、Nishant Kumarsの投稿のステップ3はisset($_POST['user_login'])
が私にとってうまくいかなかったかどうかをチェックします。
私の解決策は、ワードプレスのコードスタイルを維持するための、独立した関数としての、(テーマのfunctions.php内の)次のようなものです。
function copy_username_to_email (){
if(isset($_POST['user_email']) && !empty($_POST['user_email'])){
$_POST['user_login'] = $_POST['user_email'];
}
}
add_action('login_form_register', 'copy_username_to_email');
@Nishant Kumarは、この質問に対して完璧で受け入れられるべき答えを与えました。ただし、Wordpress 4.0バージョンのリリース後に不具合があります。 codex -から
注:4.0以降、これらのプロパティはプライベートです。 [28511] を参照してください。
ここのregistration_errors
フィルターは少し変更する必要があります。
//Remove error for username, only show error for email only.
add_filter('registration_errors', 'remove_username_empty_error', 10, 3);
function remove_username_empty_error($wp_error, $sanitized_user_login, $user_email){
if(isset($wp_error->errors['empty_username'])){
$wp_error->remove('empty_username');
}
if(isset($wp_error->errors['username_exists'])){
$wp_error->remove('username_exists');
}
return $wp_error;
}
注:@mcnesiumが述べたように、ユーザー名フィールドを完全に削除した場合(私の場合は、ログインプラグインのテーマを使用して通常の登録フォームを上書きし、そこで削除しましたユーザー名フィールド)$_POST['user_login']
はnull
になり、条件はまったく一致しません。 @mcnesiumが示唆するような条件からそれを削除したほうがよいでしょう。
@ nishant-kumarの答えを繰り返して、これはVanilla JS、追加のjsスクリプト、1ステップ、バックエンド編集は不要、Eメール入力のみでサインアップフォームを作成するためのソリューションです。
/** Hook your code to the login / Sign up page **/
add_action('login_head', function(){
/* Style to hide the user_name field group */
?>
<style>
#registerform > p:first-child{
display:none;
}
</style>
<script type="text/javascript">
/* Execute this action when the DOM is ready AND after everything in the page is loaded */
let user_email;
window.addEventListener('load',function() {
user_email = document.querySelector('[name="user_email"]');
if(user_email) { // Execute only if there is a user_email field on page
user_email.addEventListener('keyup',syncUserName);
user_email.addEventListener('change',syncUserName);
}
});
/* sync user_email's value with the hidden user_login field */
function syncUserName() {
document.querySelector('[name="user_login"]').value = user_email.value;
}
</script>
<?php
});
このコードを functions.php ファイル(または カスタムプラグイン の場合は/)に追加するだけです。
Wordpressでは、すべての登録ユーザーにユーザー名を付ける必要があるため、この要求に対する解決策は「ハック」になると思います。上記のプラグインでさえも、ほとんどの場合、Eメールアドレスからユーザー名を見つけ、そのユーザー名を使ってサイトにログインするだけです。
あなたがハックに問題がなければ、これがうまくいく可能性のある概念です。
1)登録フォームのユーザー名フィールドに一意の番号を事前に入力します。現在のタイムスタンプを使用すると、重複を避けることができます。ユーザーがフォームに記入するときに画面に表示されないように、このフィールドを非表示にします。
あなたがjQueryを使っているなら、あなたは以下のようなものを使うことができます:
$(document).ready(function() {
var timestamp = (new Date).getTime();
$('form input.username').val(timestamp);
$('form input.username').css('display', 'none');
});
この例では、 'form input.username'がユーザー名フィールドを検索するjQueryセレクターになります。セレクターが構造と一致することを確認するには、ページ上のhtml構造を確認する必要があります。
2)ユーザーが自分のEメールアドレスでログインできるようにするために、前述のようなプラグイン( http://wordpress.org/extend/plugins/wp-email-login/ )を使用します。