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