Добавление дополнительного поля телефона в форму регистрации WordPress — задача, с которой часто сталкиваются разработчики, желающие расширить стандартный функционал. В этой статье подробно рассмотрим, как с помощью хуков WordPress добавить поле "Телефон", правильно вывести его в форме, сохранить данные и сделать валидацию, чтобы пользователь вводил корректный номер.
Добавление поля телефона в форму регистрации WordPress
Для начала нужно добавить новое поле в форму регистрации. Это делается через хук register_form. Ниже пример функции, которая добавляет поле телефона с атрибутами и placeholder:
function wpdo_add_phone_field() {
$phone = ( isset( $_POST['wpdo_phone'] ) ) ? sanitize_text_field( $_POST['wpdo_phone'] ) : '';
echo '<p>'
. '<label for="wpdo_phone">Телефон <span style="color:red;">*</span></label>'
. '<input type="text" name="wpdo_phone" id="wpdo_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" />'
. '</p>';
}
add_action( 'register_form', 'wpdo_add_phone_field' );Эта функция выводит поле телефона в стандартной форме регистрации WordPress. Обратите внимание, что мы используем префикс wpdo_ для избежания конфликтов с другими плагинами.
Валидация поля телефона при регистрации
Чтобы не допустить ввод некорректных номеров, нужно добавить проверку введённых данных. Для этого используем фильтр registration_errors. В нем проверим, что поле заполнено и соответствует формату телефона.
function wpdo_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wpdo_phone'] ) ) {
$errors->add( 'phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите номер телефона.' );
} else {
$phone = trim( $_POST['wpdo_phone'] );
// Пример проверки формата телефона: только цифры, от 10 до 15 символов
if ( ! preg_match( '/^\+?[0-9]{10,15}$/', $phone ) ) {
$errors->add( 'phone_error_format', '<strong>Ошибка</strong>: Неверный формат номера телефона. Используйте только цифры, можно с плюсом в начале.' );
}
}
return $errors;
}
add_filter( 'registration_errors', 'wpdo_validate_phone_field', 10, 3 );Такая проверка гарантирует, что поле не пустое и номер телефона соответствует простому шаблону. При необходимости регулярное выражение можно адаптировать под другие форматы.
Сохранение поля телефона в мета-поле пользователя
После успешной регистрации нужно сохранить телефон пользователя в его метаданных. Для этого используем хук user_register:
function wpdo_save_phone_field( $user_id ) {
if ( ! empty( $_POST['wpdo_phone'] ) ) {
update_user_meta( $user_id, 'wpdo_phone', sanitize_text_field( $_POST['wpdo_phone'] ) );
}
}
add_action( 'user_register', 'wpdo_save_phone_field' );Теперь номер телефона будет храниться в базе данных, и его можно вывести в профиле пользователя или использовать в других целях.
Вывод телефона в профиле пользователя в админке
Чтобы администратор мог видеть и редактировать телефон пользователя, добавим поле в профиль. Для этого используем хуки show_user_profile, edit_user_profile, а для сохранения — personal_options_update и edit_user_profile_update.
function wpdo_show_phone_field( $user ) {
$phone = get_user_meta( $user->ID, 'wpdo_phone', true );
?>
<h3>Дополнительная информация</h3>
<table class="form-table">
<tr>
<th><label for="wpdo_phone">Телефон</label></th>
<td>
<input type="text" name="wpdo_phone" id="wpdo_phone" value="<?php echo esc_attr( $phone ); ?>" class="regular-text" />
<br /><span class="description">Введите номер телефона пользователя</span>
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpdo_show_phone_field' );
add_action( 'edit_user_profile', 'wpdo_show_phone_field' );
function wpdo_save_phone_field_profile( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) {
return false;
}
if ( isset( $_POST['wpdo_phone'] ) ) {
update_user_meta( $user_id, 'wpdo_phone', sanitize_text_field( $_POST['wpdo_phone'] ) );
}
}
add_action( 'personal_options_update', 'wpdo_save_phone_field_profile' );
add_action( 'edit_user_profile_update', 'wpdo_save_phone_field_profile' );Это позволит удобно управлять телефоном пользователя прямо из админки WordPress.
Примеры плагинов для расширения регистрации
Если не хочется писать код самостоятельно, можно использовать плагины, которые позволяют добавлять и валидировать поля в регистрационной форме. Например:
- Profile Builder — универсальный плагин для создания и настройки форм регистрации с возможностью добавления любых полей;
- Clearfy Pro — плагин оптимизации и безопасности, в котором есть инструменты для настройки форм и полей регистрации;
- User Registration — простой и удобный конструктор форм регистрации с поддержкой валидации.
Однако если нужен точечный контроль и оптимальный код, лучше написать решение самостоятельно, как показано выше.