WooCommerce

Как изменить, скрыть и переименовать поля оформления заказа в WooCommerce

M
Markabus
·
Фотореалистичный кадр сверху под углом: на деревянном столе смартфон с формой оформления заказа интернет-магазина — несколько полей и кнопка, за ним ноутбук с редактором той же формы, где часть полей отключена переключателями; рядом чек, коробка с этикеткой, кружка и кабель — иллюстрация к статье о настройке полей чекаута в WooCommerce

Каждое лишнее поле на странице оформления заказа — это ещё один повод бросить корзину. Магазину, который доставляет по России, не нужны «Название компании» и «Адрес, строка 2», а обязательный индекс отпугивает тех, кто его не помнит. Для настройки полей есть плагины, но грузить сайт ещё одним плагином ради трёх строк кода не хочется — WooCommerce умеет это стандартными фильтрами.

Код из этой заметки добавляется в functions.php активной темы (лучше дочерней, чтобы правки пережили обновление). Но прежде чем вставлять, прочитайте следующий раздел — от него зависит, сработает ли код вообще.

Сначала проверьте, какой у вас чекаут

Это главное, что нужно знать, прежде чем писать код. Начиная с WooCommerce 8.3 страница оформления заказа на новых магазинах собирается на блоке Checkout, а не на классическом шорткоде [woocommerce_checkout]. Блочный чекаут построен на React, и фильтр woocommerce_checkout_fields, о котором пойдёт речь ниже, на него не действует. Код вставится без ошибок, но ничего не изменит — и это самая частая причина вопросов «почему не работает».

Проверить просто: откройте страницу оформления заказа в редакторе WordPress. Если видите блок «Checkout» с настройками в боковой панели — у вас блочный чекаут. Если в содержимом стоит шорткод [woocommerce_checkout] — классический, и всё ниже работает как есть.

Для блочного чекаута часть настроек делается без кода: выделите в редакторе блок с адресными полями, и в боковой панели для полей «Компания», «Адрес, строка 2» и «Телефон» можно выбрать «Обязательное», «Необязательное» или «Скрыто». Для своих дополнительных полей есть отдельный API — woocommerce_register_additional_checkout_field(). А вот переименовать стандартные подписи блочного чекаута тем же фильтром не получится — там это отдельная задача с переводом строк.

Классический чекаут: три задачи одним фильтром

Все три операции — сделать поле необязательным, скрыть, переименовать — делаются через один фильтр woocommerce_checkout_fields. Он получает массив всех полей чекаута, сгруппированных по секциям: billing, shipping, account, order. Меняем то, что нужно, и возвращаем массив.

Можно повесить три отдельные функции на один и тот же хук, но удобнее держать всё в одной — так видно полную картину изменений:

add_filter( 'woocommerce_checkout_fields', 'shop_customize_checkout_fields' );
function shop_customize_checkout_fields( $fields ) {

    // 1. Делаем поля необязательными
    $fields['billing']['billing_last_name']['required'] = false; // фамилия
    $fields['billing']['billing_address_1']['required'] = false; // адрес

    // 2. Скрываем лишние поля
    unset( $fields['billing']['billing_company'] );   // название компании
    unset( $fields['billing']['billing_address_2'] ); // адрес, строка 2
    unset( $fields['billing']['billing_postcode'] );  // индекс

    // 3. Переименовываем подписи
    $fields['billing']['billing_email']['label'] = 'Email (для чека и уведомлений о заказе)';
    $fields['billing']['billing_phone']['label'] = 'Телефон для связи с курьером';

    return $fields;
}

Частая ошибка — сначала сделать поле необязательным, а затем его же удалить. Второе действие полностью перекрывает первое — если поле скрыто, его обязательность уже не имеет значения. Оставьте что-то одно.

Что ещё можно менять в поле

Помимо required и label у каждого поля есть и другие ключи. placeholder — подсказка внутри пустого поля. priority — число, по которому поля сортируются: чем меньше, тем выше; так можно поставить телефон перед email, задав ему priority меньше. class — массив CSS-классов, где стандартные form-row-first и form-row-last ставят два поля в одну строку, а form-row-wide растягивает на всю ширину.

$fields['billing']['billing_phone']['priority']    = 25;              // выше email
$fields['billing']['billing_phone']['placeholder'] = '+7 (___) ___-__-__';
$fields['billing']['billing_phone']['class']       = array( 'form-row-wide' );

Адресные поля: доставка и оплата сразу

Поля адреса — имя, фамилия, компания, адрес, город, индекс — существуют в двух копиях: для оплаты (billing_*) и для доставки (shipping_*). Если правите через woocommerce_checkout_fields, придётся повторить изменения для обеих секций. Есть более короткий путь — фильтр woocommerce_default_address_fields, который меняет шаблон адресных полей до того, как из него собираются обе секции:

add_filter( 'woocommerce_default_address_fields', 'shop_default_address_fields' );
function shop_default_address_fields( $fields ) {
    $fields['postcode']['required'] = false;
    unset( $fields['company'] );
    unset( $fields['address_2'] );
    return $fields;
}

Здесь ключи без префикса: postcode, а не billing_postcode. Изменение применится и к адресу оплаты, и к адресу доставки, и к формам адреса в личном кабинете.

Осторожно с обязательностью

Делать поля необязательными легко, но у части из них есть последствия. Если убрать обязательность у индекса или адреса, а в магазине включён расчёт доставки по адресу, калькулятор доставки может не сработать. Email лучше оставить обязательным всегда — на него уходят уведомления о заказе, и без него покупатель останется без подтверждения. Перед тем как убирать поле, спросите себя, кто им пользуется дальше по цепочке: курьер, служба доставки, бухгалтерия.

Частые ошибки

Код вставлен, а ничего не меняется. В девяти случаях из десяти — блочный чекаут. Смотрите первый раздел.

Правки пропали после обновления темы. Код лежал в functions.php родительской темы. Используйте дочернюю тему или небольшой плагин.

Скрытое поле всё равно требуется. Поле убрано только из одной секции, а валидация идёт по другой — например, скрыли billing_postcode, а shipping_postcode остался обязательным. Для адресных полей надёжнее woocommerce_default_address_fields.

Коротко

На классическом чекауте вся настройка полей умещается в один фильтр woocommerce_checkout_fields: обязательность, видимость, подписи, порядок. Для адресных полей есть более короткий woocommerce_default_address_fields, который меняет сразу и оплату, и доставку. Но прежде чем писать код, откройте страницу чекаута в редакторе: если там блок, а не шорткод, — эти фильтры не сработают, и настраивать поля нужно через боковую панель блока и API дополнительных полей.

Частые вопросы

Q.Почему фильтр woocommerce_checkout_fields не работает?

Скорее всего, у вас блочный чекаут — он стоит по умолчанию с WooCommerce 8.3. Этот фильтр действует только на классический чекаут на шорткоде [woocommerce_checkout]. Для блока поля настраиваются в боковой панели редактора и через API дополнительных полей.

Q.Как скрыть поле сразу и в адресе оплаты, и в адресе доставки?

Через фильтр woocommerce_default_address_fields — он меняет шаблон адресных полей до того, как из него собираются обе секции. Ключи там без префикса: postcode, company, address_2.

Q.Как поменять порядок полей на чекауте?

Через ключ priority у поля: поля сортируются по возрастанию этого числа. Задайте телефону priority меньше, чем у email, и он поднимется выше.

Q.Можно ли сделать email необязательным?

Технически — да, но не стоит: на email уходят подтверждение и уведомления о заказе, без него покупатель останется без связи с магазином. То же касается адреса и индекса, если по ним считается доставка.

Источники

Предыдущая
Как автоматически проставить alt и title для картинок товаров в WooCommerce
Следующая
Уведомление «Товар добавлен в корзину» в WooCommerce: как скрыть или изменить

Читайте также

Фотореалистичный кадр стола приёмки товара: кожаный рюкзак стоит на почтовых весах, вдоль него растянута жёлтая рулетка, рядом штангенциркуль и крафтовая бирка со штрихкодом, слева монитор с админской карточкой товара — длинная форма с вкладками и полями — иллюстрация к статье о получении всех данных товара WooCommerce по его ID.WooCommerce
12 сентября 2026 г.

Как получить все данные товара WooCommerce по его ID: объект WC_Product и его методы

Название, цена, остаток, вес, картинки, атрибуты, произвольные поля — всё это отдаёт объект товара, который возвращает wc_get_product(). Шпаргалка по методам WC_Product по группам, разница между типами товаров, работа с вариациями, датами и ценами, а также способ получить все данные разом.

Читать →
Фотореалистичный кадр рабочего стола: на переднем плане проволочная магазинная корзинка с серым керамическим чайником на упаковочной бумаге, за ней открытый ноутбук с карточкой того же чайника, где под ценой контурная кнопка с иконкой корзины и стрелкой вместо обычной кнопки покупки — иллюстрация к статье о замене кнопки «В корзину» на «Перейти в корзину» для товаров, уже добавленных в корзину WooCommerce.WooCommerce
12 сентября 2026 г.

Кнопка «Перейти в корзину» вместо «В корзину», если товар уже добавлен: WooCommerce без правки шаблонов

Покупатель уже положил товар в корзину, а карточка по-прежнему предлагает «В корзину» — так появляются случайные дубли. Показываем, как заменить кнопку на «Перейти в корзину» для товаров, которые уже в корзине: хуками, без правки шаблонов, в карточке товара и в каталоге, с учётом Ajax-добавления и кеширования страниц.

Читать →
Фотореалистичный кадр сверху на прилавок небольшой лавки: планшет в подставке со страницей корзины, где у средней строки выделено поле количества, а блок итогов полупрозрачный с кольцом загрузки и под таблицей пустое место без кнопок, рядом плетёная корзинка с мылом, свечами и банкой джема, слева крафтовые пакеты и бечёвка — иллюстрация к статье о скрытии кнопки «Обновить корзину» и автообновлении корзины WooCommerce.WooCommerce
12 сентября 2026 г.

Как скрыть кнопку «Обновить корзину» в WooCommerce и обновлять корзину автоматически

Кнопка «Обновить корзину» — лишний шаг для покупателя: изменил количество, забыл нажать, и итог не пересчитался. Показываем, как заставить классическую корзину WooCommerce обновляться сама при изменении количества, спрятать кнопку одним CSS-правилом и почему в блочной корзине делать ничего не нужно.

Читать →