Диагностика проблемы: зачем менять поля формы регистрации WooCommerce
WooCommerce по умолчанию добавляет стандартный набор полей регистрации, включая имя, фамилию, адрес электронной почты и пароль. Часто возникает задача убрать ненужные поля, например, имя и фамилию, или добавить дополнительные, например, номер телефона. Иногда поля нужно переименовать или изменить их обязательность.
По умолчанию WooCommerce не предоставляет в админке гибких настроек для полей регистрации, поэтому приходится работать с фильтрами и хуками в коде.
Пошаговое решение: удаление и изменение полей регистрации WooCommerce
Удаление ненужных полей
Для удаления стандартных полей регистрации используется фильтр woocommerce_register_form_start для добавления своих полей и woocommerce_checkout_fields для изменения полей регистрации.
Пример удаления имени и фамилии из формы регистрации:
add_filter('woocommerce_checkout_fields', 'custom_remove_registration_fields');
function custom_remove_registration_fields($fields) {
unset($fields['account']['account_first_name']);
unset($fields['account']['account_last_name']);
return $fields;
}Этот код нужно добавить в файл functions.php активной темы или в плагин для кастомных функций.
Изменение обязательности поля email
Чтобы сделать поле email необязательным или наоборот, можно изменить параметр 'required':
add_filter('woocommerce_checkout_fields', 'custom_change_email_required');
function custom_change_email_required($fields) {
$fields['account']['account_email']['required'] = false; // или true
return $fields;
}Добавление нового поля — номер телефона
Добавим поле «Номер телефона» в форму регистрации и сохраним его в метаданные пользователя:
add_filter('woocommerce_register_form_start', 'custom_add_phone_field');
function custom_add_phone_field() {
?>
<p class="form-row form-row-wide">
<label for="reg_billing_phone">Номер телефона <span class="required">*</span></label>
<input type="tel" class="input-text" name="billing_phone" id="reg_billing_phone" value="<?php if (!empty($_POST['billing_phone'])) echo esc_attr($_POST['billing_phone']); ?>" />
</p>
<?php
}
add_action('woocommerce_created_customer', 'custom_save_phone_field');
function custom_save_phone_field($customer_id) {
if (isset($_POST['billing_phone'])) {
update_user_meta($customer_id, 'billing_phone', sanitize_text_field($_POST['billing_phone']));
}
}Не забудьте добавить проверку валидности номера телефона, например, через хук woocommerce_register_post.
Проверка результата после внедрения
Чтобы убедиться, что поля изменились:
- Откройте страницу регистрации WooCommerce (обычно /my-account/).
- Проверьте, что ненужные поля отсутствуют.
- Проверьте, что новые поля отображаются и обязательность корректна.
- Зарегистрируйтесь новым пользователем и убедитесь, что данные корректно сохраняются в профиле пользователя в админке WordPress (раздел Пользователи → редактирование пользователя).
Частые ошибки и как их исправить
- Изменения не отображаются: возможно, активен кеш или используется плагин кэширования, очистите кеш сайта и браузера.
- Ошибки валидации не показываются: не добавлена проверка в хук
woocommerce_register_post, добавьте проверку и вывод ошибок. - Данные не сохраняются: не добавлен код сохранения в
woocommerce_created_customer— обязательно добавьте. - Конфликты с темой или плагинами: проверьте на чистой установке WooCommerce, отключите сторонние плагины для поиска конфликта.
Практические советы по безопасности и производительности
- Всегда используйте
sanitize_text_fieldи другие функции очистки данных при сохранении пользовательского ввода. - Не удаляйте обязательные поля, если не уверены, что WooCommerce и другие плагина не зависят от них.
- Если добавляете новые поля, убедитесь, что они валидируются и не создают уязвимости (например, XSS).
- Для больших сайтов рекомендуем использовать дочернюю тему или отдельный плагин для кастомного кода, чтобы не потерять изменения при обновлении.
Сравнение вариантов изменения полей регистрации WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
Использование фильтра woocommerce_checkout_fields | Простой, не требует сторонних плагинов | Ограниченные возможности, сложнее добавлять сложные поля |
| Плагины для кастомизации полей (например, WooCommerce Checkout Field Editor) | Удобный интерфейс, быстрое добавление и изменение | Дополнительная нагрузка, возможны конфликты |
Использование хуков woocommerce_register_form_start и woocommerce_created_customer | Гибкость, полное управление формой и сохранением данных | Требует знаний PHP, больше кода |