Часто возникает необходимость расширить стандартную форму регистрации WordPress за счет дополнительных полей, например, для сбора информации о пользователе, его предпочтениях или контактах. В этой статье разберем, как технически реализовать добавление дополнительных полей в форму регистрации с помощью хуков WordPress, без использования плагинов, а также как валидировать и сохранять эти данные.
Почему стоит использовать хуки для добавления полей регистрации
Стандартная форма регистрации WordPress содержит только базовые поля: имя пользователя, адрес электронной почты и пароль. Для расширения функционала лучше не менять исходный код, а использовать встроенные хуки — так сохраняется обновляемость и безопасность сайта.
Основные хуки, которые пригодятся:
register_form— для вывода дополнительных полей в форме регистрации;registration_errors— для валидации введенных данных;user_register— для сохранения данных после успешной регистрации.
Добавление дополнительных полей в форму регистрации
Для добавления дополнительных полей используем хук register_form. Например, добавим поле "Телефон" и "Компания".
function wpkeys_add_register_fields() {
$phone = ( isset( $_POST['wpkeys_phone'] ) ) ? sanitize_text_field( $_POST['wpkeys_phone'] ) : '';
$company = ( isset( $_POST['wpkeys_company'] ) ) ? sanitize_text_field( $_POST['wpkeys_company'] ) : '';
echo '<p>';
echo '<label for="wpkeys_phone">Телефон <span class="required">*</span></label><br>';
echo '<input type="text" name="wpkeys_phone" id="wpkeys_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" />';
echo '</p>';
echo '<p>';
echo '<label for="wpkeys_company">Компания</label><br>';
echo '<input type="text" name="wpkeys_company" id="wpkeys_company" class="input" value="' . esc_attr( $company ) . '" size="25" />';
echo '</p>';
}
add_action( 'register_form', 'wpkeys_add_register_fields' );Этот код добавит два поля в форму регистрации. Обратите внимание, что мы используем префикс wpkeys_ для избежания конфликтов.
Валидация введенных данных
Чтобы не допустить регистрацию с пустым или некорректным номером телефона, используем фильтр registration_errors. В этом примере сделаем телефон обязательным и проверим формат.
function wpkeys_validate_register_fields( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wpkeys_phone'] ) || ! preg_match( '/^\+?\d{10,15}$/', $_POST['wpkeys_phone'] ) ) {
$errors->add( 'wpkeys_phone_error', 'Пожалуйста, введите корректный номер телефона (цифры, возможно с плюсом в начале).');
}
return $errors;
}
add_filter( 'registration_errors', 'wpkeys_validate_register_fields', 10, 3 );Регулярное выражение проверяет, что телефон состоит из 10–15 цифр, может начинаться с плюса. При ошибке выведется сообщение пользователю.
Сохранение дополнительных данных в мета-поля пользователя
После успешной регистрации необходимо сохранить данные в базе. Для этого используем хук user_register. Добавим код для сохранения телефона и компании в метаполя пользователя.
function wpkeys_save_register_fields( $user_id ) {
if ( isset( $_POST['wpkeys_phone'] ) ) {
update_user_meta( $user_id, 'wpkeys_phone', sanitize_text_field( $_POST['wpkeys_phone'] ) );
}
if ( isset( $_POST['wpkeys_company'] ) ) {
update_user_meta( $user_id, 'wpkeys_company', sanitize_text_field( $_POST['wpkeys_company'] ) );
}
}
add_action( 'user_register', 'wpkeys_save_register_fields' );Так данные пользователя сохранятся и будут доступны через функцию get_user_meta($user_id, 'wpkeys_phone', true).
Вывод дополнительных полей на странице редактирования пользователя в админке
Для удобства администратора можно вывести эти поля в профиле пользователя в админке. Используем хуки show_user_profile и edit_user_profile.
function wpkeys_show_extra_profile_fields( $user ) {
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="wpkeys_phone">Телефон</label></th>
<td>
<input type="text" name="wpkeys_phone" id="wpkeys_phone" value="<?php echo esc_attr( get_user_meta( $user->ID, 'wpkeys_phone', true ) ); ?>" class="regular-text" />
</td>
</tr>
<tr>
<th><label for="wpkeys_company">Компания</label></th>
<td>
<input type="text" name="wpkeys_company" id="wpkeys_company" value="<?php echo esc_attr( get_user_meta( $user->ID, 'wpkeys_company', true ) ); ?>" class="regular-text" />
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpkeys_show_extra_profile_fields' );
add_action( 'edit_user_profile', 'wpkeys_show_extra_profile_fields' );Также нужно сохранить изменения, если админ редактирует профиль:
function wpkeys_save_extra_profile_fields( $user_id ) {
if ( !current_user_can( 'edit_user', $user_id ) ) {
return false;
}
if ( isset( $_POST['wpkeys_phone'] ) ) {
update_user_meta( $user_id, 'wpkeys_phone', sanitize_text_field( $_POST['wpkeys_phone'] ) );
}
if ( isset( $_POST['wpkeys_company'] ) ) {
update_user_meta( $user_id, 'wpkeys_company', sanitize_text_field( $_POST['wpkeys_company'] ) );
}
}
add_action( 'personal_options_update', 'wpkeys_save_extra_profile_fields' );
add_action( 'edit_user_profile_update', 'wpkeys_save_extra_profile_fields' );Рекомендации по безопасности и удобству
При работе с пользовательскими данными важно всегда использовать функции очистки и проверки, такие как sanitize_text_field и esc_attr, чтобы избежать XSS и инъекций.
Если предполагается более сложный ввод, например, телефон с маской, можно подключить JavaScript-плагины для валидации на клиенте.
Для расширенного управления регистрацией и профилями можно использовать плагины, например, Clearfy Pro, который предоставляет удобные инструменты для кастомизации форм.
Выводы
Добавление дополнительных полей в регистрацию WordPress с помощью хуков — гибкий и безопасный способ расширить функциональность сайта без потери совместимости с ядром и плагинами. Используя приведенный пример, вы сможете легко внедрить необходимые поля, проверить их и сохранить для дальнейшего использования.