Иногда стандартной формы регистрации WordPress недостаточно для сбора нужной информации от пользователей. В таких случаях возникает задача добавить дополнительное, уникальное поле, например, номер телефона, дату рождения или любой другой параметр, который будет обязательным и уникальным для каждого пользователя. В этой статье подробно рассмотрим, как это сделать, используя хуки WordPress, и приведем примеры кода, которые можно адаптировать под свои нужды.
Почему важно добавить уникальное поле в регистрацию WordPress
Стандартная форма регистрации WordPress предоставляет лишь базовые поля: имя пользователя, email, пароль. Однако для многих проектов этого недостаточно. Например, если вы хотите ограничить регистрацию по уникальному номеру клиента, ID сотрудника или другому параметру, то без кастомизации формы не обойтись.
Добавление уникального поля позволяет не только расширить функционал, но и повысить контроль над качеством данных, предотвращая дублирование и обеспечивая более точную идентификацию пользователя.
Также уникальные поля могут использоваться для последующей фильтрации, сегментирования пользователей или интеграции с внешними сервисами.
Как добавить новое поле в форму регистрации WordPress
Для добавления нового поля в форму регистрации нужно воспользоваться хуком register_form. С его помощью можно вывести дополнительный HTML-код в форму.
Пример добавления поля "Номер телефона":
add_action('register_form', 'wpmentor_add_phone_field');
function wpmentor_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
}
Этот код выведет дополнительное поле в форме регистрации, при этом сохранит введенное значение при ошибках формы.
Валидация введенного поля
Чтобы убедиться, что пользователь заполнил поле, и оно соответствует требованиям (например, уникальность номера телефона), нужно использовать хук registration_errors:
add_filter('registration_errors', 'wpmentor_validate_phone_field', 10, 3);
function wpmentor_validate_phone_field($errors, $sanitized_user_login, $user_email) {
if ( empty( $_POST['phone'] ) || ! preg_match('/^\+?\d{10,15}$/', $_POST['phone']) ) {
$errors->add('phone_error', '<strong>Ошибка</strong>: Введите корректный номер телефона.');
} else {
$phone = sanitize_text_field( $_POST['phone'] );
// Проверяем уникальность
$users = get_users(array(
'meta_key' => 'phone',
'meta_value' => $phone,
'number' => 1
));
if ( ! empty($users) ) {
$errors->add('phone_exists', '<strong>Ошибка</strong>: Данный номер телефона уже зарегистрирован.');
}
}
return $errors;
}
Регулярное выражение проверяет, что номер состоит из 10-15 цифр с возможным плюсом в начале. Вы можете адаптировать его под свои требования.
Сохранение значения уникального поля в пользовательские метаданные
После успешной регистрации необходимо сохранить дополнительное поле в базе данных. Для этого используется хук user_register:
add_action('user_register', 'wpmentor_save_phone_field');
function wpmentor_save_phone_field($user_id) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta($user_id, 'phone', sanitize_text_field( $_POST['phone'] ));
}
}
Вывод уникального поля в админке WordPress
Чтобы видеть номера телефонов прямо в списке пользователей, добавим дополнительный столбец в таблицу пользователей. Используем фильтры manage_users_columns и manage_users_custom_column:
add_filter('manage_users_columns', 'wpmentor_add_phone_column');
function wpmentor_add_phone_column($columns) {
$columns['phone'] = 'Номер телефона';
return $columns;
}
add_action('manage_users_custom_column', 'wpmentor_show_phone_column_content', 10, 3);
function wpmentor_show_phone_column_content($value, $column_name, $user_id) {
if ( 'phone' === $column_name ) {
return get_user_meta($user_id, 'phone', true);
}
return $value;
}
Пример использования плагина Clearfy Pro для расширения формы регистрации
Если вы хотите не писать код вручную, можно использовать плагин Clearfy Pro. Он позволяет добавлять кастомные поля в регистрацию, настраивать их валидацию и отображение без программирования.
Преимущества Clearfy Pro:
- Простая настройка через интерфейс;
- Поддержка различных типов полей (текст, чекбоксы, выпадающие списки);
- Встроенная валидация и проверка уникальности;
- Интеграция с другими популярными плагинами безопасности и оптимизации.
Советы по безопасности и производительности
При добавлении пользовательских полей важно не забывать о безопасности. Всегда используйте функции санитизации данных (sanitize_text_field, sanitize_email и др.). Проверяйте уникальность и корректность данных на этапе валидации.
Кроме того, избегайте излишних запросов к базе данных, например, кэшируйте результаты при проверке уникальности, если это возможно.
Итоги
Добавление уникального поля в форму регистрации WordPress — это задача, с которой можно справиться как с помощью собственного кода, так и с помощью специализированных плагинов, таких как Clearfy Pro. Главное — правильно обработать ввод данных, проверить их уникальность и корректно сохранить для дальнейшего использования.
Используйте приведенные примеры кода как основу для своих решений, адаптируя их под конкретные задачи проекта.