Кастомизация полей оформления заказа WooCommerce без плагинов: подробное руководство

Диагностика задачи: зачем и какие поля нужно изменить в оформлении заказа WooCommerce

WooCommerce по умолчанию предоставляет базовый набор полей на странице оформления заказа (checkout). Часто требуется добавить, убрать или изменить поля для соответствия бизнес-процессам — например, добавить поле "ИНН" для юридических лиц или убрать поле "Компания", если оно не нужно.

Чтобы понять, какие именно поля требуют кастомизации, откройте страницу оформления заказа и проанализируйте текущие поля. Проверьте, какие из них важны для вашего процесса, а какие можно убрать или изменить.

Как вывести текущие поля оформления заказа для изучения

Добавьте в functions.php вашей темы следующий код для отладки:

add_action('woocommerce_checkout_process', function() {
    error_log(print_r(WC()->checkout()->get_checkout_fields(), true));
});

Этот код выведет в лог PHP все поля оформления заказа, сгруппированные по разделам (billing, shipping, account, order). Это позволит точно увидеть структуру и названия ключей.

Пошаговое решение: добавление, изменение и удаление полей

1. Удаление стандартных полей

Например, чтобы убрать поле "Компания" (company) из раздела billing, добавьте в functions.php следующий код:

add_filter('woocommerce_checkout_fields', function($fields) {
    unset($fields['billing']['billing_company']);
    return $fields;
});

Этот код удалит поле из формы, но не затронет данные в базе.

2. Изменение меток, обязательности и плейсхолдеров

Для изменения параметров поля, например, обязательного поля "Телефон":

add_filter('woocommerce_checkout_fields', function($fields) {
    $fields['billing']['billing_phone']['label'] = 'Контактный телефон для связи';
    $fields['billing']['billing_phone']['required'] = true;
    $fields['billing']['billing_phone']['placeholder'] = 'Введите телефон с кодом города';
    return $fields;
});

3. Добавление нового поля

Добавим поле "ИНН" в раздел billing, необязательное:

add_filter('woocommerce_checkout_fields', function($fields) {
    $fields['billing']['billing_inn'] = array(
        'type'        => 'text',
        'label'       => 'ИНН',
        'required'    => false,
        'placeholder' => 'Введите ИНН',
        'class'       => array('form-row-wide'),
        'clear'       => true,
        'priority'    => 120,
    );
    return $fields;
});

4. Сохранение значения в заказе

Чтобы данные нового поля сохранялись и отображались в админке, добавьте следующие хуки:

// Сохранение поля
add_action('woocommerce_checkout_update_order_meta', function($order_id) {
    if (!empty($_POST['billing_inn'])) {
        update_post_meta($order_id, '_billing_inn', sanitize_text_field($_POST['billing_inn']));
    }
});

// Отображение в админке
add_action('woocommerce_admin_order_data_after_billing_address', function($order) {
    $inn = get_post_meta($order->get_id(), '_billing_inn', true);
    if ($inn) {
        echo '<p><strong>ИНН:</strong> ' . esc_html($inn) . '</p>';
    }
});

5. Валидация нового поля

Если поле "ИНН" должно быть обязательно и иметь определённый формат (например, 10 или 12 цифр), добавьте проверку:

add_action('woocommerce_checkout_process', function() {
    if (empty($_POST['billing_inn'])) {
        wc_add_notice('Пожалуйста, укажите ИНН.', 'error');
    } elseif (!preg_match('/^\d{10}(\d{2})?$/', $_POST['billing_inn'])) {
        wc_add_notice('ИНН должен содержать 10 или 12 цифр.', 'error');
    }
});

Проверка результата после внедрения кода

1. Перейдите на страницу оформления заказа, убедитесь, что поле "ИНН" отображается в нужном месте, а удалённые поля отсутствуют.

2. Попробуйте оформить заказ с заполненным и пустым полем "ИНН", проверьте, что валидация срабатывает корректно (если она добавлена).

3. В админке WooCommerce откройте заказ, убедитесь, что значение поля "ИНН" отображается под адресом оплаты.

Частые ошибки при кастомизации полей оформления заказа

  • Ошибка: Поле не отображается на странице оформления заказа.
    Причина: Неправильное имя поля или раздела в массиве $fields. Проверьте через debug вывод.
  • Ошибка: Значение поля не сохраняется в заказе.
    Причина: Отсутствует обработчик woocommerce_checkout_update_order_meta.
  • Ошибка: Ошибки валидации не показываются пользователю.
    Причина: Не добавлен вызов wc_add_notice с типом 'error'.
  • Ошибка: Кастомное поле не выводится в админке.
    Причина: Нет хука woocommerce_admin_order_data_after_billing_address или ошибка в коде вывода.

Практические советы по безопасности и производительности

  • Всегда используйте sanitize_text_field() или другие функции очистки для данных из $_POST перед сохранением в базу.
  • Для сложных полей используйте соответствующие типы (например, email, tel), чтобы браузер обеспечивал базовую валидацию.
  • Старайтесь минимизировать количество добавляемых полей, чтобы не перегружать страницу оформления заказа и не ухудшать UX.
  • Для SEO и маркетинга можно интегрировать пользовательские поля с аналитикой, например, передавать их в CRM или Google Analytics через дополнительные скрипты.

Таблица сравнения методов кастомизации полей оформления заказа

МетодПреимуществаНедостаткиПример
Использование фильтра woocommerce_checkout_fieldsГибкость, не требует плагинов, полный контроль над полямиНужно писать код, требует базовых знаний PHPДобавление и изменение полей в functions.php
Плагины для кастомизации (например, Checkout Field Editor)Упрощённый интерфейс, не требует кодаДополнительная нагрузка, возможная несовместимость, ограниченная кастомизацияПлагин WooCommerce Checkout Field Editor
Кастомизация полей оформления заказа WooCommerce без плагинов: пошаговое руководство
17.04.2026
Как удалить зависимые данные от удалённых плагинов в WooCommerce
30.04.2026
Как добавить и удалить поля в оформлении заказа WooCommerce без плагинов
31.05.2026
Как успешно проверить и исправить ошибки в кастомных полях оформления заказа WooCommerce
01.07.2026
Как автоматизировать управление купонной историей в WordPress
02.03.2026