Иногда стандартная форма регистрации WordPress не покрывает всех требований по сбору данных от пользователей. В таких случаях возникает необходимость добавить дополнительные поля, например, телефон, дату рождения или согласие с политикой конфиденциальности. В этой статье рассмотрим, как расширить стандартную форму регистрации WordPress кодом, без использования плагинов, с сохранением данных в пользовательские мета-поля.
Почему стоит добавлять поля регистрации программно?
Использование кода вместо плагинов даёт несколько преимуществ:
- Минимальный вес сайта — отсутствие лишних плагинов.
- Гибкость в настройке и стилизации полей.
- Контроль над валидацией и обработкой данных.
- Лёгкая интеграция с другими функциями и хуками WordPress.
Такой подход особенно актуален для тех, кто хочет получить специфичные данные от пользователей и не использовать универсальные решения.
Добавление поля в форму регистрации WordPress
Для расширения формы регистрации нам нужно использовать хук register_form. Он позволяет добавить HTML код в форму. Например, добавим поле «Телефон».
function wpcontrol_add_phone_field() {
$phone = ( isset( $_POST['wpcontrol_phone'] ) ) ? sanitize_text_field( $_POST['wpcontrol_phone'] ) : '';
?>
<p>
<label for="wpcontrol_phone">Телефон<br />
<input type="text" name="wpcontrol_phone" id="wpcontrol_phone" class="input" value="<?php echo esc_attr( $phone ); ?>" size="25" /></label>
</p>
<?php
}
add_action( 'register_form', 'wpcontrol_add_phone_field' );Этот код добавит текстовое поле «Телефон» в форму регистрации на стандартной странице WordPress.
Валидация дополнительного поля при регистрации
Чтобы убедиться, что пользователь заполнил поле, нужно подключить проверку с помощью хука registration_errors. Если поле пустое или не соответствует требованиям, регистрация не пройдет.
function wpcontrol_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wpcontrol_phone'] ) || ! preg_match( '/^\+?[0-9\-\s]{7,15}$/', $_POST['wpcontrol_phone'] ) ) {
$errors->add( 'wpcontrol_phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите корректный номер телефона.' );
}
return $errors;
}
add_filter( 'registration_errors', 'wpcontrol_validate_phone_field', 10, 3 );В этом примере проверяем, что телефон заполнен и соответствует простому регулярному выражению для номеров с цифрами, пробелами, дефисами и опциональным плюсом в начале.
Сохранение дополнительного поля в мета пользователя
После успешной регистрации необходимо сохранить данные в метаданных пользователя. Для этого используется хук user_register:
function wpcontrol_save_phone_field( $user_id ) {
if ( ! empty( $_POST['wpcontrol_phone'] ) ) {
update_user_meta( $user_id, 'wpcontrol_phone', sanitize_text_field( $_POST['wpcontrol_phone'] ) );
}
}
add_action( 'user_register', 'wpcontrol_save_phone_field' );Теперь введённый телефон будет храниться и доступен для вывода в админке или на сайте.
Вывод дополнительного поля в профиле пользователя в админке
Чтобы администраторы могли видеть и изменять дополнительное поле, добавим его в профиль пользователя через хуки show_user_profile и edit_user_profile:
function wpcontrol_show_phone_field( $user ) {
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="wpcontrol_phone">Телефон</label></th>
<td>
<input type="text" name="wpcontrol_phone" id="wpcontrol_phone" value="<?php echo esc_attr( get_user_meta( $user->ID, 'wpcontrol_phone', true ) ); ?>" class="regular-text" /><br />
<span class="description">Введите номер телефона пользователя.</span>
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpcontrol_show_phone_field' );
add_action( 'edit_user_profile', 'wpcontrol_show_phone_field' );Сохранение поля из профиля пользователя в админке
Для сохранения изменений в админке используем хуки personal_options_update и edit_user_profile_update:
function wpcontrol_save_phone_field_admin( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) {
return false;
}
if ( isset( $_POST['wpcontrol_phone'] ) ) {
update_user_meta( $user_id, 'wpcontrol_phone', sanitize_text_field( $_POST['wpcontrol_phone'] ) );
}
}
add_action( 'personal_options_update', 'wpcontrol_save_phone_field_admin' );
add_action( 'edit_user_profile_update', 'wpcontrol_save_phone_field_admin' );Готовое решение и рекомендации
Мы рассмотрели полный цикл: добавление поля в форму регистрации, валидацию, сохранение и отображение в профиле администратора. Такой подход позволит вам гибко расширять регистрацию под любые нужды.
Если вы хотите упростить себе жизнь и использовать готовые решения, обратите внимание на плагин Clearfy Pro. Он позволяет управлять многими аспектами сайта, включая расширение форм и оптимизацию.
Для улучшения UX можно добавить маску ввода телефона с помощью JavaScript или подключить jQuery плагин. Это улучшит качество вводимых данных и снизит количество ошибок.
Итоги
Добавление дополнительных полей в форму регистрации WordPress — частая задача, которую можно решить без плагинов с помощью нескольких хуков и функций. Такой подход даёт полный контроль и минимизирует нагрузку на сайт.