В стандартной форме регистрации WordPress по умолчанию есть только базовые поля: имя пользователя, email и пароль. Но часто на практике возникает необходимость добавить дополнительные поля — например, номер телефона, имя и фамилию, или согласие с правилами. В этой статье мы подробно разберем, как добавить свои собственные поля в форму регистрации WordPress, обработать их данные и сохранить в базе данных.
Почему важно добавлять свои поля в форму регистрации WordPress
Иногда стандартных данных, собираемых WordPress, недостаточно для решения бизнес-задач. Например, если вы создаете сайт с членством, вам может понадобиться собирать дополнительную информацию о пользователях. Или если вы хотите сегментировать аудиторию по городам или интересам — нужны дополнительные поля.
Добавление пользовательских полей позволяет:
- Собрать необходимые данные сразу при регистрации.
- Автоматизировать процессы, не требуя ручного ввода информации позже.
- Сделать форму более информативной и релевантной под задачи сайта.
Но при этом важно грамотно обработать эти данные и обеспечить их безопасность.
Добавление поля в форму регистрации: пример с полем «Телефон»
Для добавления нового поля в форму регистрации нам придется использовать несколько хуков WordPress. В частности, хук register_form позволяет вставить HTML код в форму, registration_errors — проверить корректность данных, а user_register — сохранить данные в мета пользователя.
Вывод поля на форму регистрации
Добавим поле «Телефон» с помощью хука register_form:
function wpcoder_add_phone_field() {
$phone = ( ! empty( $_POST['phone'] ) ) ? sanitize_text_field( $_POST['phone'] ) : '';
?>
<p>
<label for="phone">Телефон<br />
<input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr( $phone ); ?>" size="25" /></label>
</p>
<?php
}
add_action( 'register_form', 'wpcoder_add_phone_field' );Этот код вставит поле «Телефон» на страницу регистрации. Обратите внимание, что мы выводим введенное ранее значение, чтобы пользователь не потерял введенные данные при ошибке.
Валидация поля «Телефон»
Очень важно проверить корректность данных, чтобы не сохранять мусор и не создавать угрозы безопасности. Для этого используем фильтр registration_errors:
function wpcoder_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['phone'] ) || ! preg_match( '/^\+?[0-9]{10,15}$/', $_POST['phone'] ) ) {
$errors->add( 'phone_error', '<strong>Ошибка</strong>: Введите корректный номер телефона.' );
}
return $errors;
}
add_filter( 'registration_errors', 'wpcoder_validate_phone_field', 10, 3 );Здесь мы проверяем, что поле заполнено и соответствует шаблону — номер телефона должен содержать от 10 до 15 цифр, опционально с плюсом в начале.
Сохранение поля «Телефон» в мета пользователя
После успешной регистрации необходимо сохранить телефон в базе. Для этого применим хук user_register:
function wpcoder_save_phone_field( $user_id ) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
add_action( 'user_register', 'wpcoder_save_phone_field' );Теперь у каждого пользователя будет сохранено дополнительное поле phone в метаданных. Его можно вывести в профиле или использовать в коде.
Отображение пользовательского поля в админке
Чтобы администратору было удобно видеть дополнительную информацию, можно добавить поле «Телефон» в профиль пользователя в административной панели.
Вывод поля в профиле пользователя
function wpcoder_show_phone_in_profile( $user ) {
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="phone">Телефон</label></th>
<td>
<input type="text" name="phone" id="phone" value="<?php echo esc_attr( get_user_meta( $user->ID, 'phone', true ) ); ?>" class="regular-text" /><br />
<span class="description">Введите номер телефона пользователя.</span>
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpcoder_show_phone_in_profile' );
add_action( 'edit_user_profile', 'wpcoder_show_phone_in_profile' );Сохранение изменений из профиля
function wpcoder_save_phone_from_profile( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) {
return false;
}
if ( isset( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
add_action( 'personal_options_update', 'wpcoder_save_phone_from_profile' );
add_action( 'edit_user_profile_update', 'wpcoder_save_phone_from_profile' );Теперь администратор может видеть и редактировать поле «Телефон» прямо в профиле пользователя.
Использование готовых плагинов для расширения формы регистрации
Если вам не хочется писать код, существуют плагины, которые позволяют добавить произвольные поля в форму регистрации WordPress без программирования:
- User Registration — интуитивный конструктор форм с возможностью добавления любых полей.
- Profile Builder — мощный инструмент для управления регистрацией и профилями пользователей.
- WP User Manager — бесплатный плагин с расширенными возможностями кастомизации.
Эти плагины подойдут для сайтов, где нужна гибкость, и нет желания погружаться в программирование.
Рекомендации по безопасности и оптимизации
При добавлении своих полей в форму регистрации важно всегда:
- Санитизировать и валидировать вводимые данные, чтобы избежать XSS и SQL-инъекций.
- Использовать nonce-поля, если делаете сложные формы для защиты от CSRF.
- Не хранить в пользовательских метаданных конфиденциальные данные в открытом виде.
- Тестировать регистрацию с разными браузерами и устройствами.
Если форма регистрации используется на публичном сайте, обязательно добавьте CAPTCHA или другие методы защиты от ботов.
Итоги
Добавление пользовательских полей в форму регистрации WordPress — типовая задача, которую можно решить с помощью нескольких хуков. В статье приведен развернутый пример с полем «Телефон», включая вывод, валидацию, сохранение и отображение в админке. Такой подход можно адаптировать под любые данные, необходимые вашему проекту.