
🚫 Индекс в чекауте WooCommerce мешает покупателям: 4 способа снять проверку
Почему валидация почтового индекса: лишний барьер
WooCommerce по умолчанию требует заполнения поля почтового индекса и валидирует его. Но реальность такова: десятки стран Африки, Центральной Америки и Океании вообще не используют zip-коды. Покупатель из Кении или Ямайки вводит случайные цифры, получает ошибку и уходит.

Лишние поля и ошибки на странице оформления заказа напрямую бьют по конверсии. По данным Baymard Institute, 17% покупателей из США бросали чекаут именно из-за слишком длинного или сложного оформления. Убрать одно-два ненужных поля: самый дешёвый способ поднять продажи без рекламного бюджета.
Ниже, четыре способа отключить валидацию: от полного удаления поля до простого переименования. Выбирайте под свою аудиторию.
💡 Быстрый обзор:
- Полностью удаляем поле индекса через
unset(), для магазинов, которым индекс не нужен вовсе - Делаем индекс необязательным, для магазинов со смешанной географией
- Убираем лишние поля из формы выставления счета, если индекс лишь часть проблемы
- Меняем название поля на понятное пользователю, минимальное вмешательство
- Рассматриваем плагины, если не хотите трогать код
Способ 1: Полностью убрать поле индекса из чекаута
Самый радикальный и чистый метод. Хук woocommerce_checkout_fields даёт полный контроль над всеми полями чекаута, берём массив, вырезаем billing_postcode и возвращаем обратно.
Код добавляется в functions.php дочерней темы:
1 /** 2 * Убираем поле почтового индекса (billing_postcode) из чекаута. 3 */ 4 add_filter( 'woocommerce_checkout_fields', 'quadlayers_remove_billing_postcode_checkout' ); 5 function quadlayers_remove_billing_postcode_checkout( $fields ) { 6 unset( $fields['billing']['billing_postcode'] ); 7 return $fields; 8 }

Что здесь происходит. Хук woocommerce_checkout_fields получает весь массив полей чекаута, и billing, и shipping, и order. Функция unset() вырезает из секции billing конкретный ключ billing_postcode. Массив возвращается в WooCommerce уже без поля индекса, оно пропадает и из формы, и из валидации.
Но если ваша аудитория смешанная и кому-то индекс всё же нужен, смотрите способ 2.
Способ 2: Сделать почтовый индекс необязательным
Вместо удаления поля можно просто снять флажок обязательности. Поле остаётся на странице, но покупатель спокойно пропускает его без ошибки.
Здесь используем фильтр woocommerce_default_address_fields, он отвечает за настройки по умолчанию для всех адресных полей:
1 /** 2 * Делаем поле почтового индекса необязательным. 3 */ 4 add_filter( 'woocommerce_default_address_fields', 'quadlayers_optional_postcode_checkout' ); 5 function quadlayers_optional_postcode_checkout( $p_fields ) { 6 $p_fields['postcode']['required'] = false; 7 return $p_fields; 8 }

Отличие от первого способа, в хуке. woocommerce_default_address_fields работает на уровень ниже: он задаёт свойства самих полей (label, placeholder, required) до того, как они попадут в billing- и shipping-секции. Поэтому ключ здесь просто postcode, без префикса billing_.
Подходит магазинам, которые продают и в страны с индексами, и без.
Способ 3: Убрать лишние поля из формы выставления счета
Часто проблема шире одного индекса. Поля company, address_2, а также city и state тоже не всегда нужны: каждое добавляет трение в чекаут.
Тот же хук woocommerce_checkout_fields убирает любое поле по его идентификатору. Вот полный список доступных ключей для billing-секции:
1 unset( $fields['billing']['billing_company'] ); 2 unset( $fields['billing']['billing_address_2'] ); 3 unset( $fields['billing']['billing_city'] ); 4 unset( $fields['billing']['billing_state'] ); 5 unset( $fields['billing']['billing_phone'] );
Имена самоочевидны. Префикс billing_ указывает, что поле принадлежит форме выставления счета. Например, чтобы убрать company и address_2 вместе с индексом:
1 /** 2 * Убираем company, address_2 и postal code из чекаута. 3 */ 4 add_filter( 'woocommerce_checkout_fields', 'quadlayers_remove_billing_fields' ); 5 function quadlayers_remove_billing_fields( $fields ) { 6 unset( $fields['billing']['billing_company'] ); 7 unset( $fields['billing']['billing_address_2'] ); 8 unset( $fields['billing']['billing_postcode'] ); 9 return $fields; 10 }

Внутри одной функции спокойно уживаются несколько unset(), просто перечисляете ключи, которые хотите скрыть.
Способ 4: Переименовать поле на понятное пользователю
Минимальное вмешательство с максимальным эффектом. Вы не трогаете валидацию, просто меняете загадочную надпись «Postcode / ZIP» на то, что понятно вашей аудитории. Например, «Район» или «Индекс (если есть)».
Используем хук gettext, тот самый, через который WordPress и WooCommerce переводят интерфейс:
1 /** 2 * Меняем названия полей чекаута через gettext. 3 */ 4 add_filter( 'gettext', 'quadlayers_billing_field_strings', 20, 3 ); 5 function quadlayers_billing_field_strings( $translated_text, $text, $domain ) { 6 switch ( $translated_text ) { 7 case 'Postcode / ZIP': 8 $translated_text = __( 'Area code', 'woocommerce' ); 9 break; 10 } 11 return $translated_text; 12 }
Хотите переименовать несколько полей, добавляете case-ы внутрь switch:
1 function quadlayers_billing_field_strings( $translated_text, $text, $domain ) { 2 switch ( $translated_text ) { 3 case 'Billing details': 4 $translated_text = __( 'Order information', 'woocommerce' ); 5 break; 6 case 'Ship to a different address?': 7 $translated_text = __( 'Send to other location please', 'woocommerce' ); 8 break; 9 case 'Company name': 10 $translated_text = __( 'Company', 'woocommerce' ); 11 break; 12 case 'Postcode / ZIP': 13 $translated_text = __( 'Area code', 'woocommerce' ); 14 break; 15 } 16 return $translated_text; 17 }

На скриншоте выше, результат комбинации подходов: несколько полей скрыты, поле индекса переименовано в «Area code» и сделано необязательным, заголовки billing- и shipping-секций заменены на свои. Чекаут стал короче и понятнее без плагинов.
Плагины для управления полями чекаута
Не хотите лезть в functions.php, есть готовые инструменты. Рассмотрим два бесплатных плагина, которые решают задачу без единой строки кода.
Checkout Field Manager for WooCommerce
Checkout Field Manager, один из самых популярных редакторов полей чекаута. Позволяет добавлять, удалять и переупорядочивать поля в секциях Billing, Shipping и Additional, всё через визуальный интерфейс.

Плагин бесплатный, базовая версия покрывает основные сценарии: скрыть поле, сделать его необязательным, переименовать. Для условной логики (показать поле только для определённой страны) и дополнительных типов полей есть премиум-версия.
Direct Checkout for WooCommerce
Direct Checkout for WooCommerce (ранее назывался «WooCommerce Direct Checkout») решает более широкую задачу, упрощает весь процесс оформления заказа. Кроме удаления полей он умеет: пропускать корзину и вести сразу на чекаут, менять текст кнопки «Add to cart», добавлять AJAX-добавление в корзину на страницах товаров.

Оба плагина регулярно обновляются и совместимы с актуальными версиями WordPress и WooCommerce.
⁉️🤔 Частые вопросы
Можно ли отключить валидацию только для определённых стран?
Да. Вы можете повесить проверку на
WC()->customer->get_billing_country()внутри фильтраwoocommerce_checkout_fieldsи применятьunset()илиrequired = falseтолько для списка стран без индексов. Так покупатели из Германии или США продолжат видеть обязательное поле, а клиенты из Кении, нет.
Сломается ли доставка после отключения валидации индекса?
Зависит от службы доставки. Почтовые сервисы вроде USPS или Royal Mail используют индекс для расчёта тарифов, для них поле лучше оставить обязательным или хотя бы видимым. Если вы продаёте цифровые товары или работаете с курьерской доставкой по городу, индекс можно смело убирать. Протестируйте расчёт стоимости для каждой зоны доставки после изменений.
Код не работает, поле индекса осталось на месте. В чём дело?
Три частые причины. Первая: кеш, сбросьте кеш сайта и браузера, после правки
functions.phpоткройте чекаут в режиме инкогнито. Вторая: другой плагин или тема переопределяет поле позже вашего фильтра, попробуйте увеличить приоритет хука:add_filter( 'woocommerce_checkout_fields', '...', 99 ). Третья: вы редактируете не тотfunctions.php, код должен быть в файле активной (дочерней) темы.
Как убрать поле индекса без правки functions.php?
Установите Checkout Field Manager for WooCommerce, он позволяет отключать любые поля через админку. Или используйте плагин Code Snippets: вставьте PHP-код из способа 1 как сниппет и активируйте его. Оба варианта безопаснее прямой правки
functions.phpи не слетают при обновлении темы.
Что делать, если валидация индекса отключена, но WooCommerce всё равно выдаёт ошибку?
Скорее всего, ошибку генерирует не ядро WooCommerce, а сторонний плагин, например, плагин службы доставки или валидатор адресов. Отключите плагины доставки и проверки адреса по одному и найдите виновника. Также проверьте, не задана ли валидация на уровне JavaScript в теме, иногда разработчики дублируют проверку на фронте.
Практический пример из видео
Посмотрите живой пример настройки полей чекаута, от кода до результата на фронте:
Что ставить: код или плагин?
Если вам нужно просто убрать одно-два поля и вы не боитесь редактора темы, четырёх строк PHP из способа 1 или 2 достаточно. Это легковесно и не добавляет лишнего кода на сайт.
Если полей для настройки много, вы часто экспериментируете с чекаутом или не хотите трогать functions.php, берите Checkout Field Manager for WooCommerce. Он бесплатный и даёт визуальный контроль над всеми полями без риска уронить сайт опечаткой в коде.
Для комплексной оптимизации чекаута (пропуск корзины, AJAX-кнопки, кастомные надписи), Direct Checkout for WooCommerce закрывает всё в одном плагине.
Главное правило, после любых изменений пройдите тестовый заказ от начала до конца. Пять минут теста экономят часы разбора жалоб от реальных покупателей.


