Стандартная форма регистрации WordPress содержит минимальный набор полей: имя пользователя, email и пароль. Однако в реальных проектах часто требуется собрать дополнительную информацию от пользователей — например, телефон, дату рождения, согласие с правилами или любые другие данные. В этой статье подробно разберём, как добавить дополнительные поля в формы регистрации WordPress, сохранить данные и вывести их в профиле пользователя.
Почему важно расширять форму регистрации
Иногда без дополнительных данных сложно организовать работу сайта: вести маркетинг, сегментировать пользователей, настроить персонализацию. Например, для сайта клуба полезно запросить дату рождения, чтобы поздравлять с праздниками. Для магазинов — телефон и адрес доставки. Собранные данные можно использовать в последующих email-рассылках или для анализа.
Важно при этом не ломать стандартный процесс регистрации и не снижать безопасность сайта. Поэтому добавление полей нужно делать аккуратно, с проверкой и безопасным сохранением.
Как добавить дополнительные поля в форму регистрации WordPress
Для начала создадим функцию, которая выведет дополнительные поля в форме регистрации. Это делается через хук register_form. Ниже пример с добавлением поля "Телефон":
function wpmax_add_phone_field() {
$phone = ( isset( $_POST['wpmax_phone'] ) ) ? sanitize_text_field( $_POST['wpmax_phone'] ) : '';
echo '<p>'
. '<label for="wpmax_phone">Телефон<br /></label>'
. '<input type="text" name="wpmax_phone" id="wpmax_phone" class="input" value="' . esc_attr( $phone ) . '" size="25" />'
. '</p>';
}
add_action( 'register_form', 'wpmax_add_phone_field' );Здесь мы выводим поле с именем wpmax_phone, которое будет доступно при отправке формы.
Валидация дополнительных полей
Чтобы пользователь не мог отправить пустое поле или неверный формат, добавим проверку через хук registration_errors:
function wpmax_validate_phone_field( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['wpmax_phone'] ) || ! preg_match( '/^\+?\d{7,15}$/', $_POST['wpmax_phone'] ) ) {
$errors->add( 'wpmax_phone_error', '<strong>Ошибка</strong>: Пожалуйста, введите корректный телефон.' );
}
return $errors;
}
add_filter( 'registration_errors', 'wpmax_validate_phone_field', 10, 3 );В примере мы требуем, чтобы телефон состоял из 7-15 цифр и мог начинаться с плюса. Если условие не выполнено — показываем ошибку.
Сохранение данных пользователя
После успешной регистрации нужно сохранить новое поле в метаданные пользователя. Для этого используем хук user_register:
function wpmax_save_phone_field( $user_id ) {
if ( ! empty( $_POST['wpmax_phone'] ) ) {
update_user_meta( $user_id, 'wpmax_phone', sanitize_text_field( $_POST['wpmax_phone'] ) );
}
}
add_action( 'user_register', 'wpmax_save_phone_field' );Теперь у каждого пользователя появится мета-ключ wpmax_phone с сохранённым телефоном.
Отображение дополнительных полей в профиле пользователя
Чтобы администраторы и сами пользователи могли видеть и редактировать новые данные, добавим поля в страницу редактирования профиля. Для этого используем хуки show_user_profile и edit_user_profile:
function wpmax_show_phone_field( $user ) {
$phone = get_user_meta( $user->ID, 'wpmax_phone', true );
echo '<h3>Дополнительная информация</h3>'
. '<table class="form-table">'
. '<tr><th><label for="wpmax_phone">Телефон</label></th><td>'
. '<input type="text" name="wpmax_phone" id="wpmax_phone" value="' . esc_attr( $phone ) . '" class="regular-text" />'
. '</td></tr>'
. '</table>';
}
add_action( 'show_user_profile', 'wpmax_show_phone_field' );
add_action( 'edit_user_profile', 'wpmax_show_phone_field' );И добавим сохранение при обновлении профиля:
function wpmax_save_phone_profile( $user_id ) {
if ( ! current_user_can( 'edit_user', $user_id ) ) {
return false;
}
if ( isset( $_POST['wpmax_phone'] ) ) {
update_user_meta( $user_id, 'wpmax_phone', sanitize_text_field( $_POST['wpmax_phone'] ) );
}
}
add_action( 'personal_options_update', 'wpmax_save_phone_profile' );
add_action( 'edit_user_profile_update', 'wpmax_save_phone_profile' );Использование плагинов для расширения формы регистрации
Если не хотите писать код, можно использовать плагины. Но часто они громоздкие или платные. Из бесплатных стоит отметить:
- User Registration — удобный конструктор форм с поддержкой дополнительных полей.
- Profile Builder — также позволяет добавлять любые поля и настроить внешний вид.
- Register Plus Redux — простой плагин для расширения стандартной регистрации.
Если вы хотите интегрировать расширенную регистрацию с WPMax, обратите внимание на плагин WPCommunity, который поддерживает множество дополнительных полей и гибкие настройки.
Советы по безопасности и удобству
При добавлении новых полей важно:
- Всегда очищать и валидировать данные перед сохранением.
- Не сохранять чувствительную информацию без шифрования.
- Проверять права пользователя при сохранении из профиля.
- Делать поля опциональными, если данные не критичны, чтобы не отпугивать пользователей.
Кроме того, если планируется массовое использование, протестируйте форму на разных устройствах и браузерах.
Заключение
Добавление дополнительных полей в форму регистрации WordPress — простая и полезная задача, которая расширяет возможности сайта и улучшает взаимодействие с пользователями. Используя приведённые примеры кода, вы сможете быстро внедрить нужные поля, настроить валидацию и сохранять данные в профиле.
Для расширенного функционала и удобства администрирования стоит рассмотреть плагины из экосистемы WPShop, например, WPCommunity.