Диагностика проблемы: почему поле почтового индекса обязательно
По умолчанию WooCommerce требует заполнение поля «Почтовый индекс» в адресных формах на странице оформления заказа. Это связано с необходимостью корректного расчёта стоимости доставки и проверки валидности адреса. Однако в ряде случаев, особенно при виртуальных товарах или доставке без адреса, это поле можно сделать необязательным или полностью скрыть. Если попытаться просто убрать поле через CSS, это не снимет требование заполнения, и форма выдаст ошибку.
Пошаговое решение: удаляем обязательность поля почтового индекса
1. Отключаем валидацию поля почтового индекса
Для этого нужно использовать фильтр woocommerce_billing_fields или woocommerce_shipping_fields, если у вас есть отдельная форма для адреса доставки. В примере ниже мы убираем обязательность в поле «billing_postcode».
add_filter('woocommerce_billing_fields', 'wpdo_remove_postcode_required', 20, 1);
function wpdo_remove_postcode_required($fields) {
if (isset($fields['billing_postcode'])) {
$fields['billing_postcode']['required'] = false;
}
return $fields;
}2. (Опционально) Скрываем поле почтового индекса из формы
Если вы хотите полностью убрать поле с формы, можно добавить фильтр, который удалит поле из массива.
add_filter('woocommerce_billing_fields', 'wpdo_remove_postcode_field', 20, 1);
function wpdo_remove_postcode_field($fields) {
unset($fields['billing_postcode']);
return $fields;
}Для доставки (shipping) замените woocommerce_billing_fields на woocommerce_shipping_fields.
Проверка результата после внедрения
- Перейдите на страницу оформления заказа с незаполненным полем почтового индекса.
- Попробуйте оформить заказ без заполнения этого поля.
- Если заказ проходит и ошибку вы не видите — решение работает.
- Если поле скрыто, убедитесь, что это не влияет на расчёт доставки и работу плагинов, связанных с адресами.
Частые ошибки и как их исправить
- Ошибка «Пожалуйста, введите почтовый индекс» при отправке формы: значит, поле всё ещё обязательное. Проверьте приоритеты фильтров и правильность хука (
woocommerce_billing_fieldsvswoocommerce_shipping_fields). - Удаление поля вызывает проблемы с расчетом доставки или налогов: убедитесь, что у вас нет плагинов, которые жёстко требуют почтовый индекс. В таком случае лучше оставить поле, но сделать его необязательным.
- Поле отображается, но не сохраняется: проверьте, не перезаписывает ли тему или другой плагин поля в checkout.
Практические советы по безопасности и производительности
- Не удаляйте поле, если используете интеграции с доставкой, которые зависят от почтового индекса — это может привести к неправильным расчетам.
- Используйте дочерние темы или плагины для добавления кода, чтобы при обновлении WooCommerce изменения не пропали.
- Проверяйте работу checkout на разных устройствах и браузерах после внесения изменений.
Сравнение вариантов решения
| Метод | Преимущества | Недостатки | Когда использовать |
|---|---|---|---|
| Отключить обязательность поля (изменить required = false) | Поле остается, пользователи могут заполнить по желанию, минимальный риск для плагинов доставки | Поле все еще отображается, может вызывать вопросы у пользователей | Если нужны данные, но не обязательные |
| Удалить поле полностью из формы | Чистый интерфейс, нет поля, которое нужно игнорировать | Риск нарушить работу доставки или интеграций, если поле требуется | Для цифровых товаров, или когда адрес не нужен |
| Скрыть поле через CSS | Просто и быстро | Поле остается обязательным, ошибка при отправке формы | Не рекомендуется |