Зачем добавлять дополнительные поля в форму регистрации WordPress
Стандартная форма регистрации WordPress содержит минимальный набор полей: имя пользователя, email и пароль. Однако в реальных проектах часто возникает необходимость собирать дополнительную информацию от пользователей — например, номер телефона, дату рождения, согласие с правилами или индивидуальные данные для вашего сервиса.
Добавление таких полей позволяет расширить функциональность сайта, улучшить коммуникацию с пользователями и собрать нужные данные для бизнес-процессов. При этом важно сделать это корректно, чтобы не нарушить работу сайта и обеспечить валидацию введённых данных.
В этой статье мы рассмотрим, как добавить дополнительное поле в стандартную форму регистрации WordPress программно, без использования плагинов, а также как обработать и сохранить новые данные.
Добавление дополнительного поля в форму регистрации (hook register_form)
Для добавления поля в форму регистрации WordPress можно использовать хук register_form, который позволяет вывести дополнительные HTML-элементы внутри формы.
Пример добавления поля «Телефон»:
function wpkit_add_phone_field() {
// Получаем старое значение поля, если была ошибка при регистрации
$phone = isset( $_POST['wpkit_phone'] ) ? esc_attr( $_POST['wpkit_phone'] ) : '';
echo '<p>
<label for="wpkit_phone">Телефон (обязательно)</label><br/>
<input type="text" name="wpkit_phone" id="wpkit_phone" class="input" value="' . $phone . '" size="25" />
</p>';
}
add_action( 'register_form', 'wpkit_add_phone_field' );Этот код добавит в форму регистрации поле с именем wpkit_phone, которое пользователь сможет заполнить. Мы используем префикс wpkit_ для избежания конфликтов с другими полями.
Валидация дополнительного поля при регистрации (hook registration_errors)
Добавленное поле нужно обязательно проверять. Для этого используется фильтр registration_errors, который позволяет проверить данные и добавить ошибку, если поле заполнено неправильно или не заполнено вовсе.
function wpkit_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wpkit_phone'] ) || ! preg_match( '/^\+?\d{10,15}$/', $_POST['wpkit_phone'] ) ) {
$errors->add( 'wpkit_phone_error', '<strong>Ошибка</strong>: введите корректный номер телефона.' );
}
return $errors;
}
add_filter( 'registration_errors', 'wpkit_validate_phone_field', 10, 3 );Здесь мы проверяем, что поле не пустое и содержит только цифры с возможным плюсом в начале, длиной от 10 до 15 символов. Если проверка не проходит, регистрация блокируется с ошибкой.
Сохранение дополнительного поля в мета данных пользователя (hook user_register)
После успешной регистрации нужно сохранить введённые данные в профиле пользователя. Для этого используется хук user_register.
function wpkit_save_phone_field( $user_id ) {
if ( ! empty( $_POST['wpkit_phone'] ) ) {
update_user_meta( $user_id, 'wpkit_phone', sanitize_text_field( $_POST['wpkit_phone'] ) );
}
}
add_action( 'user_register', 'wpkit_save_phone_field' );<Данные надежно сохраняются в мета поля пользователя, откуда вы сможете их вывести в личном кабинете или использовать для отправки уведомлений.
Отображение дополнительного поля в профиле пользователя
Чтобы администратор мог увидеть и отредактировать дополнительное поле в админке, нужно добавить его в форму редактирования профиля.
function wpkit_show_phone_field_profile( $user ) {
$phone = get_user_meta( $user->ID, 'wpkit_phone', true );
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="wpkit_phone">Телефон</label></th>
<td>
<input type="text" name="wpkit_phone" id="wpkit_phone" value="<?php echo esc_attr( $phone ); ?>" class="regular-text" />
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpkit_show_phone_field_profile' );
add_action( 'edit_user_profile', 'wpkit_show_phone_field_profile' );И добавим сохранение при обновлении профиля:
function wpkit_save_phone_field_profile( $user_id ) {
if ( current_user_can( 'edit_user', $user_id ) && isset( $_POST['wpkit_phone'] ) ) {
update_user_meta( $user_id, 'wpkit_phone', sanitize_text_field( $_POST['wpkit_phone'] ) );
}
}
add_action( 'personal_options_update', 'wpkit_save_phone_field_profile' );
add_action( 'edit_user_profile_update', 'wpkit_save_phone_field_profile' );Рекомендации по безопасности и совместимости
Всегда нужно фильтровать и очищать пользовательский ввод через sanitize_text_field или другие функции безопасности, чтобы избежать XSS и других уязвимостей.
Также используйте уникальные префиксы для своих функций и полей, чтобы избежать конфликтов с другими плагинами и темами.
Если вы планируете расширять регистрацию более сложными элементами, рассмотрите использование готовых решений, например, плагина Clearfy, который помогает оптимизировать и расширять функциональность WordPress, включая регистрацию.
Заключение
Добавление дополнительных полей в форму регистрации WordPress — частая потребность, и реализовать её можно очень просто, используя базовые хуки и фильтры. Важно правильно выводить поле, валидировать данные при регистрации и сохранять их в мета пользователя для дальнейшего использования.
Предложенный код — надежный и простой старт, который можно адаптировать под свои задачи, добавляя любые поля и расширяя логику регистрации под нужды вашего проекта.