Электронная почта как имя пользователя в регистрации

многие пользователи могли бы разрешить регистрацию на сайте wp без имени пользователя, только с электронной почтой.

Это основная проблема, поэтому решение (трюк) заключается в замене имени пользователя на электронную почту.

Если для wp требуется имя пользователя и адрес электронной почты для регистрации, мы можем получить значение электронной почты и поместить его в значение имени пользователя. В регистрационной форме пользователи будут видеть два поля:

  1. ваш адрес электронной почты
  2. повторите свою электронную почту

Это трюк, потому что для wp реальные поля будут: 1. имя пользователя (как ваша электронная почта) 2. ваша электронная почта (как повторите вашу электронную почту)

Но есть и другая проблема: является ли @ (at) допустимым символом для имени пользователя?

Как мы можем это сделать?

Должны ли мы вставить код в файл functions.php ? .. что-то вроде этого:

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() с помощью filter register_url , поэтому ссылка на регистр будет указывать на вашу новую страницу регистрации.

Если вы хотите использовать его со стандартным интерфейсом, предоставляемым wp-login.php , вам понадобятся некоторые обходные пути. Допустим, вы хотите отобразить только поле ввода электронной почты для регистрации, вы можете просто (ну, немного взломанный) скрыть поле имени пользователя примерно так:

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

Sidenote: существует также возможность вставлять таблицы стилей в wp-login.php с login_enqueue_scripts действия login_enqueue_scripts .

Но если вы это сделаете, вы отправите пустое имя пользователя, так что вам нужно подключить два фильтра: sanitize_user и validate_username .

 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()); }); }); 

Ницца и просто.