В стандартной форме регистрации WordPress отсутствует возможность добавлять дополнительные поля, которые могут понадобиться для сбора определенной информации о пользователе. В этой статье мы подробно рассмотрим, как добавить кастомное поле на страницу регистрации, проверить его корректность, сохранить данные в метаполе пользователя и вывести их в административной панели.
Зачем добавлять кастомные поля при регистрации
По умолчанию WordPress собирает минимальный набор данных: имя пользователя, email и пароль. Однако в реальных проектах часто требуется собирать дополнительную информацию, например, номер телефона, дату рождения, согласие с пользовательским соглашением и другое. Это помогает сделать сайт более персонализированным и автоматизировать бизнес-процессы.
Добавление кастомных полей позволяет:
- Собрать важные данные сразу при регистрации.
- Повысить качество взаимодействия с пользователем.
- Использовать данные для дальнейшей автоматизации и сегментации.
Добавление кастомного поля на страницу регистрации
Для вывода дополнительного поля при регистрации можно использовать хук register_form. Ниже пример добавления текстового поля "Телефон":
function wproot_add_custom_register_field() {
$phone = isset($_POST['wproot_phone']) ? esc_attr($_POST['wproot_phone']) : '';
echo '<p>';
echo '<label for="wproot_phone">Телефон <span style="color:red">*</span></label><br>';
echo '<input type="text" name="wproot_phone" id="wproot_phone" class="input" value="'. $phone .'" size="25" />';
echo '</p>';
}
add_action('register_form', 'wproot_add_custom_register_field');В этом коде мы создаем поле для ввода телефона с обязательным заполнением (обозначено звездочкой). Значение поля сохраняется после отправки формы, чтобы пользователь не потерял введенные данные в случае ошибки.
Валидация кастомного поля при регистрации
Очень важно проверить корректность введенных данных, иначе в профиле пользователя могут появиться некорректные или пустые значения. Для этого используем хук registration_errors:
function wproot_validate_custom_register_field($errors, $sanitized_user_login, $user_email) {
if ( empty($_POST['wproot_phone']) || !preg_match('/^[+0-9\s-]{5,20}$/', $_POST['wproot_phone']) ) {
$errors->add('wproot_phone_error', '<strong>Ошибка:</strong> Введите корректный телефон.');
}
return $errors;
}
add_filter('registration_errors', 'wproot_validate_custom_register_field', 10, 3);В данном примере мы проверяем, что поле не пустое и подходит под регулярное выражение, позволяющее цифры, пробелы, плюсы и дефисы. В случае ошибки пользователю выводится сообщение.
Сохранение значения кастомного поля в метаполя пользователя
После успешной регистрации необходимо сохранить введенный телефон в профиль пользователя. Используем для этого хук user_register:
function wproot_save_custom_user_meta($user_id) {
if ( !empty($_POST['wproot_phone']) ) {
update_user_meta($user_id, 'wproot_phone', sanitize_text_field($_POST['wproot_phone']));
}
}
add_action('user_register', 'wproot_save_custom_user_meta');Функция sanitize_text_field защищает от XSS и некорректных данных. Данные сохраняются в пользовательском метаполе wproot_phone.
Отображение кастомного поля в профиле пользователя в админке
Чтобы администратор мог видеть и редактировать поле телефона у пользователя, добавим его в форму редактирования профиля:
function wproot_show_custom_user_profile_field($user) {
$phone = get_user_meta($user->ID, 'wproot_phone', true);
?>
<h3>Дополнительные данные</h3>
<table class="form-table">
<tr>
<th><label for="wproot_phone">Телефон</label></th>
<td>
<input type="text" name="wproot_phone" id="wproot_phone" value="<?php echo esc_attr($phone); ?>" class="regular-text" />
<br><span class="description">Введите номер телефона пользователя.</span>
</td>
</tr>
</table>
<?php
}
add_action('show_user_profile', 'wproot_show_custom_user_profile_field');
add_action('edit_user_profile', 'wproot_show_custom_user_profile_field');И добавим сохранение при редактировании профиля:
function wproot_save_custom_user_profile_field($user_id) {
if ( !current_user_can('edit_user', $user_id) ) {
return false;
}
if ( isset($_POST['wproot_phone']) ) {
update_user_meta($user_id, 'wproot_phone', sanitize_text_field($_POST['wproot_phone']));
}
}
add_action('personal_options_update', 'wproot_save_custom_user_profile_field');
add_action('edit_user_profile_update', 'wproot_save_custom_user_profile_field');Использование плагинов для упрощения задачи
Если вы предпочитаете не писать код, существуют плагины, которые позволяют добавлять поля в форму регистрации и редактирования профиля. Вот несколько популярных:
- User Registration — визуальный конструктор форм с поддержкой кастомных полей.
- Profile Builder — расширенное управление профилями пользователей.
- Clearfy Pro — плагин оптимизации, включающий управление пользовательскими данными.
Однако при использовании кода вы получаете максимальный контроль и минимальную нагрузку на сайт.
Резюме и рекомендации
Добавление и сохранение кастомных полей пользователя при регистрации в WordPress — задача решаемая с помощью стандартных хуков. Важно:
- Выводить поле через
register_form. - Проверять данные через
registration_errors. - Сохранять мета через
user_register. - Добавлять отображение и редактирование в админке.
- Использовать
sanitize_text_fieldи регулярные выражения для безопасности.
Такой подход позволит собирать нужные данные с регистрацией и использовать их в дальнейшем для персонализации и автоматизации.