Стандартная форма регистрации WordPress содержит всего несколько базовых полей: имя пользователя, email и пароль. Но часто возникает необходимость добавить свои поля, например, телефон, дату рождения или согласие с пользовательским соглашением. В этой статье расскажу, как добавить дополнительные поля в форму регистрации WordPress без использования сторонних плагинов, а также как валидировать и сохранять эти данные.
Почему стоит добавлять поля регистрации без плагинов
Плагины упрощают задачу, но они добавляют дополнительный код, могут конфликтовать с другими расширениями и влиять на скорость сайта. Если нужно добавить всего пару полей, лучше сделать это вручную — так вы получаете полный контроль без лишних зависимостей.
Кроме того, ручная реализация учит лучше понимать архитектуру WordPress и работу хуков, что полезно для дальнейшей разработки.
Добавление дополнительных полей в форму регистрации WordPress
Для начала нужно вывести новые поля в стандартной форме регистрации. Для этого используем хук register_form. Пример добавления поля «Телефон»:
function wpmoney_add_phone_field() {
$phone = ( isset( $_POST['phone'] ) ) ? esc_attr( $_POST['phone'] ) : '';
echo '<p>'
. '<label for="phone">Телефон</label><br/>'
. '<input type="text" name="phone" id="phone" class="input" value="' . $phone . '" size="25" />'
. '</p>';
}
add_action( 'register_form', 'wpmoney_add_phone_field' );Этот код добавит поле «Телефон» в форму регистрации и сохранит введённое значение после отправки, если форма заполнена с ошибками.
Валидация добавленных полей в форме регистрации
Очень важно проверить введённые данные, чтобы не допустить ошибочного или вредоносного ввода. Для этого используем фильтр registration_errors. Пример валидации поля «Телефон»:
function wpmoney_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> Введите корректный телефон в формате +71234567890' );
}
return $errors;
}
add_filter( 'registration_errors', 'wpmoney_validate_phone_field', 10, 3 );В этом примере проверяется, что телефон не пустой и соответствует регулярному выражению, допускающему от 10 до 15 цифр с опциональным плюсом в начале.
Сохранение дополнительных данных пользователя
После успешной регистрации нужно сохранить введённые данные в мета-поле пользователя. Для этого используем хук user_register:
function wpmoney_save_phone_field( $user_id ) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
add_action( 'user_register', 'wpmoney_save_phone_field' );Теперь у каждого пользователя, зарегистрированного с новым полем, в метаданных будет храниться телефон.
Вывод и редактирование дополнительного поля в админке WordPress
Чтобы администраторы могли видеть и редактировать значение поля «Телефон» в профиле пользователя, добавим соответствующие поля в админ-панель.
Вывод поля в профиле пользователя
function wpmoney_show_phone_field_in_profile( $user ) {
$phone = get_user_meta( $user->ID, 'phone', true );
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="phone">Телефон</label></th>
<td>
<input type="text" name="phone" id="phone" value="<?php echo esc_attr( $phone ); ?>" class="regular-text" />
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpmoney_show_phone_field_in_profile' );
add_action( 'edit_user_profile', 'wpmoney_show_phone_field_in_profile' );Сохранение поля из профиля
function wpmoney_save_phone_field_in_profile( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) {
return false;
}
if ( isset( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
add_action( 'personal_options_update', 'wpmoney_save_phone_field_in_profile' );
add_action( 'edit_user_profile_update', 'wpmoney_save_phone_field_in_profile' );Таким образом, администратор и сам пользователь смогут видеть и редактировать телефон прямо в профиле.
Полезные плагины для расширения регистрации
Если вы хотите более мощное решение с визуальными формами и интеграцией, можно обратить внимание на плагины:
- Clearfy Pro — оптимизация и настройка функций сайта, включая формы регистрации.
- WPCommunity — плагин для создания сообщества с расширенной регистрацией и профилями.
Но если задача — только добавить пару полей в стандартную форму, то описанный выше код — самый лёгкий и гибкий способ.