Чи можливо видалити поле імені користувача зі сторінки реєстрації?
Я хочу, щоб користувачі вводили лише свою електронну пошту та пароль.
Новий користувач повинен бути створений лише на основі цих двох параметрів.
Це можливо і якщо так, то як?
Чи можливо видалити поле імені користувача зі сторінки реєстрації?
Я хочу, щоб користувачі вводили лише свою електронну пошту та пароль.
Новий користувач повинен бути створений лише на основі цих двох параметрів.
Це можливо і якщо так, то як?
Відповіді:
Абсолютно ТАК , ви можете цього досягти.
Правило 1: WordPress вимагає імені користувача. Ми повинні надати ім’я користувача.
Правило 2: Не редагуйте основний код WordPress.
Ми можемо досягти цього, сховавши поле користувача, отримавши електронну пошту та зберігаючи його як ім’я користувача.
Крок 1: Видаліть текстове поле Ім'я користувача
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);
Крок 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'];
}
});
Помістіть вище код у файлі function.php теми .
Ви також можете завантажити повний плагін, щоб досягти цього.
Крок 3 на посаді Нішанта Кумара перевіряє, чи isset($_POST['user_login'])
це не спрацювало для мене, оскільки логін - це те, що ми насправді хочемо видалити.
Моє рішення полягає в наступному (у темі function.php), також як окрема функція, щоб дотримуватися стилю коду wordpress:
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');
@
та .
електронну адресу як ім'я користувача:$_POST['user_login'] = str_replace(array('@', '.'), '_', $_POST['user_email']);
@Nishant Kumar дав ідеальну і слід прийняти відповідь на це питання. Однак, після випуску версії Wordpress 4.0 є проблеми. Від кодексу -
Примітка. Починаючи з 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, ось ванільний JS, не потрібен додатковий скрипт js, 1 крок, не потрібне редагування бекенда, рішення створити форму для реєстрації лише з введенням електронної пошти:
/** 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
});
Вам просто потрібно додати цей код у файл function.php (або у власний плагін , якщо у вас є)
user_email is not defined at HTMLInputElement.syncUserName
. Переміщення частини "syncUserName" функції у верхній функції видаляє помилку, і фрагмент коду чудово працює. Просто прокоментуйте, щоб інші могли зіткнутися з тією ж проблемою. Дякую Gfra54.
user_email
var в той же обсяг. Спасибі.
Я думаю, що будь-яке рішення цього запиту буде «злом», оскільки wordpress вимагає, щоб було ім’я користувача для всіх зареєстрованих користувачів. Навіть зазначений вище плагін, швидше за все, просто знайде ім’я користувача через електронну адресу, а потім використовує це ім'я користувача для входу на сайт.
Якщо з хаком все в порядку, ось ця концепція, яка могла б працювати:
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) Використовуйте плагін, як той, що згадувався раніше ( http://wordpress.org/extend/plugins/wp-email-login/ ), щоб дозволити користувачам увійти з електронною адресою.