В процессе регистрации пользователей на сайте WordPress иногда требуется автоматически изменять или дополнять данные, которые они вводят, либо добавлять свои поля с автоматической обработкой. Это полезно, когда нужно стандартизировать введённые данные, добавить дополнительные метаданные или интегрировать регистрацию с внешними сервисами.
Почему и когда нужна автоматическая модификация данных при регистрации
Часто стандартной формы регистрации недостаточно, и нужно, чтобы данные пользователя соответствовали определённым правилам или автоматически дополнялись. Например:
- Стандартизация регистрационной информации: привести email к нижнему регистру, исправить формат имени.
- Добавление дополнительных метаданных: номер телефона, ID партнёрской программы, статус подписки.
- Интеграция с CRM или другими сервисами — передать данные сразу после регистрации.
- Автоматическая роль или статус пользователя в зависимости от введённых данных.
Все эти задачи можно решить с помощью хуков WordPress и небольших функций.
Использование хука user_register для изменения данных
Хук user_register срабатывает сразу после создания пользователя и позволяет работать с ID нового пользователя. На этом этапе можно менять данные в базе, например, обновлять метаданные или профиль.
Пример функции, которая автоматически приводит email к нижнему регистру и добавляет пользовательское поле «referrer»:
function wpfaq_user_register_modify_data($user_id) {
$user_info = get_userdata($user_id);
$email = strtolower($user_info->user_email);
wp_update_user(array(
'ID' => $user_id,
'user_email' => $email
));
// Добавим дополнительное метаполе
update_user_meta($user_id, 'referrer', 'wpfaq_campaign');
}
add_action('user_register', 'wpfaq_user_register_modify_data');
Этот код гарантирует, что email будет в нижнем регистре, а также добавляет дополнительное поле для дальнейшей логики.
Автоматическая установка роли пользователя на основе данных
Часто нужно назначать роль в зависимости от параметров регистрации. Например, если пользователь регистрируется по определённому домену email, назначить роль «подписчик».
function wpfaq_set_user_role_by_email_domain($user_id) {
$user = get_userdata($user_id);
$email = $user->user_email;
$domain = substr(strrchr($email, "@"), 1);
if ($domain === 'example.com') {
$user->set_role('subscriber');
} else {
$user->set_role('customer');
}
}
add_action('user_register', 'wpfaq_set_user_role_by_email_domain');
Такой подход упрощает классификацию пользователей без дополнительного вмешательства.
Добавление и обработка дополнительных полей регистрационной формы
По умолчанию форма регистрации WordPress минимальна. Для добавления новых полей можно использовать хуки register_form для вывода и registration_errors для валидации, а затем сохранять данные в user_register.
Пример добавления поля "Телефон"
Выведем поле в форму:
function wpfaq_register_form_phone() {
$phone = ( isset( $_POST['phone'] ) ) ? sanitize_text_field( $_POST['phone'] ) : '';
echo '<p><label for="phone">Телефон<br /><input type="text" name="phone" id="phone" class="input" value="' . esc_attr( $phone ) . '" size="25" /></label></p>';
}
add_action( 'register_form', 'wpfaq_register_form_phone' );
Добавим валидацию:
function wpfaq_registration_errors_phone($errors, $sanitized_user_login, $user_email) {
if ( empty( $_POST['phone'] ) || ! preg_match( '/^\+?\d{10,15}$/', $_POST['phone'] ) ) {
$errors->add('phone_error', '<strong>ОШИБКА</strong>: Введите корректный номер телефона.');
}
return $errors;
}
add_filter( 'registration_errors', 'wpfaq_registration_errors_phone', 10, 3 );
Сохраним номер в метаданные пользователя:
function wpfaq_save_phone_field($user_id) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
add_action( 'user_register', 'wpfaq_save_phone_field' );
Полезные плагины для расширения регистрации и работы с пользователями
Если хочется не писать код, можно использовать готовые решения:
- Profile Builder — удобное расширение для создания форм регистрации с доп. полями и валидацией.
- WPForms — конструктор форм с поддержкой регистрации и настройкой логики.
- Clearfy Pro на wpshop.ru — ускоряет и оптимизирует работу WordPress, включая расширенные настройки пользователей.
Пример интеграции с внешним API после регистрации
Представим, что нужно отправлять данные нового пользователя в CRM. Используем тот же хук user_register:
function wpfaq_send_user_to_crm($user_id) {
$user = get_userdata($user_id);
$data = array(
'email' => $user->user_email,
'name' => $user->first_name . ' ' . $user->last_name,
'phone' => get_user_meta($user_id, 'phone', true),
);
$response = wp_remote_post('https://api.crm-example.com/users', array(
'body' => json_encode($data),
'headers' => array('Content-Type' => 'application/json'),
));
if (is_wp_error($response)) {
error_log('Ошибка отправки данных пользователя в CRM: ' . $response->get_error_message());
}
}
add_action('user_register', 'wpfaq_send_user_to_crm');
Такой метод позволяет автоматизировать обмен данными без ручного импорта.
Резюме
Автоматическое изменение и дополнение данных при регистрации в WordPress — мощный инструмент для кастомизации пользовательского опыта и интеграции с внешними сервисами. Использование хуков user_register, register_form, registration_errors позволяет гибко управлять процессом регистрации без сложных плагинов, а при необходимости — расширять возможности с помощью готовых решений.