В стандартной форме регистрации WordPress отсутствуют дополнительные поля, которые могут понадобиться для сбора дополнительной информации о пользователях. Например, вы можете захотеть добавить поле "Номер телефона", "Компания" или "Возраст". В этой статье мы подробно рассмотрим, как добавить новое поле в форму регистрации, как валидировать введённые данные и как сохранить их в базе данных WordPress.
Почему стоит добавить новое поле в форму регистрации WordPress
По умолчанию форма регистрации WordPress содержит только базовые поля: имя пользователя, адрес электронной почты и пароль. Однако для многих сайтов этого недостаточно. Например, если вы ведёте сообщество с дополнительными требованиями к пользователям, или хотите сегментировать аудиторию по дополнительным признакам — это невозможно без расширения формы регистрации.
Добавление собственного поля позволяет собирать необходимые данные сразу при регистрации, что упрощает дальнейшую работу с пользователями и улучшает взаимодействие.
Как добавить поле в форму регистрации — поэтапный разбор
Добавление поля с помощью хука register_form
Для вывода нового поля в форме регистрации используется хук register_form. Ниже пример функции wpdo_add_custom_registration_field, которая добавляет поле "Номер телефона":
function wpdo_add_custom_registration_field() {
$phone = ( isset( $_POST['wpdo_phone'] ) ) ? sanitize_text_field( $_POST['wpdo_phone'] ) : '';
echo '<p>'
.'<label for="wpdo_phone">Номер телефона<br/>'
.'<input type="text" name="wpdo_phone" id="wpdo_phone" class="input" value="'. esc_attr( $phone ) .'" size="25" />'
.'</label>'
.'</p>';
}Эта функция выводит простой текстовый инпут. Обратите внимание, что мы сразу получаем значение из $_POST, чтобы поле сохраняло введённые данные при ошибках валидации.
Валидация поля с помощью хука registration_errors
Чтобы гарантировать корректность введённых данных, необходимо реализовать проверку. Для этого используем хук registration_errors:
function wpdo_validate_custom_registration_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wpdo_phone'] ) || ! preg_match( '/^\+?[0-9\s\-]{7,15}$/', $_POST['wpdo_phone'] ) ) {
$errors->add( 'wpdo_phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите корректный номер телефона.' );
}
return $errors;
}Здесь мы проверяем, что поле не пустое и соответствует простому регулярному выражению для телефонного номера. Вы можете изменить регулярное выражение под свои требования.
Сохранение данных в мета-поле пользователя с помощью хука user_register
После успешной регистрации нам нужно сохранить данные в базе. Добавим функцию для сохранения:
function wpdo_save_custom_registration_field( $user_id ) {
if ( ! empty( $_POST['wpdo_phone'] ) ) {
update_user_meta( $user_id, 'wpdo_phone', sanitize_text_field( $_POST['wpdo_phone'] ) );
}
}Эта функция обновляет мета-данные пользователя, где ключом выступает wpdo_phone.
Как вывести добавленное поле в профиле пользователя
Чтобы администраторы и сами пользователи могли видеть и изменять поле "Номер телефона" в админке, добавим его в профиль WordPress.
Отображение поля в профиле через хуки show_user_profile и edit_user_profile
function wpdo_show_phone_field_in_profile( $user ) {
$phone = get_user_meta( $user->ID, 'wpdo_phone', true );
echo '<h3>Дополнительная информация WPDO</h3>';
echo '<table class="form-table"><tr>'
.'<th><label for="wpdo_phone">Номер телефона</label></th>'
.'<td><input type="text" name="wpdo_phone" id="wpdo_phone" value="'. esc_attr( $phone ) .'" class="regular-text" /></td>'
.'</tr></table>';
}Эту функцию необходимо повесить на хуки show_user_profile и edit_user_profile.
Сохранение изменений поля в профиле
function wpdo_save_phone_field_in_profile( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) {
return false;
}
if ( isset( $_POST['wpdo_phone'] ) ) {
update_user_meta( $user_id, 'wpdo_phone', sanitize_text_field( $_POST['wpdo_phone'] ) );
}
}Эту функцию подключаем к хукам personal_options_update и edit_user_profile_update для сохранения данных.
Используемые плагины для расширения регистрации
Хотя добавление полей вручную — гибкий и удобный способ, существует ряд плагинов, которые позволяют расширять форму регистрации без написания кода:
- User Registration — удобный конструктор форм с поддержкой множества полей.
- Profile Builder — плагин с богатым функционалом для кастомизации профилей и регистрации.
- Ultimate Member — мощное решение для создания сообществ с расширенной регистрацией и профилями.
Использование плагинов оправдано, если вы хотите быстро внедрить расширенную регистрацию без глубокого погружения в код.
Советы и рекомендации по безопасности
При добавлении кастомных полей обязательно выполняйте санитизацию и валидацию данных, чтобы избежать XSS и других уязвимостей. Используйте функции WordPress для фильтрации ввода, такие как sanitize_text_field или esc_attr.
Также убедитесь, что данные, вводимые пользователями, не раскрывают конфиденциальную информацию и не нарушают правила вашей политики конфиденциальности.
Итоги
Добавление нового поля в форму регистрации WordPress — задача, которую можно решить с помощью трёх основных шагов: вывести поле с помощью register_form, проверить данные через registration_errors и сохранить их с помощью user_register. Для удобства работы с уже зарегистрированными пользователями поле можно добавить в профиль через соответствующие хуки.
Такой подход позволит вам гибко настраивать регистрацию под задачи вашего сайта, будь то сбор телефонных номеров, дополнительных данных или создание уникальных профилей.