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

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

Часто стандартных полей оформления заказа WooCommerce недостаточно: бизнес требует добавить дополнительные данные от клиента, например, ИНН, дату монтажа или комментарии. Аналогично, нужно иногда убрать ненужные поля, чтобы упростить форму и повысить конверсию. Использование плагинов увеличивает нагрузку и требует постоянного обновления, поэтому оптимально применять кастомный код в functions.php или в собственном плагине.

Как добавить новое поле в оформление заказа WooCommerce

Для добавления поля на страницу оформления заказа применяется фильтр woocommerce_checkout_fields. Ниже пример добавления текстового поля "ИНН" в секцию с биллинговой информацией.

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

Обратите внимание, что ключ поля должен начинаться с префикса billing_, shipping_ или order_ для корректной обработки WooCommerce.

Сохранение значения нового поля в метаданных заказа

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

add_action('woocommerce_checkout_update_order_meta', 'wpmarketing_save_custom_checkout_field');
function wpmarketing_save_custom_checkout_field($order_id) {
    if (!empty($_POST['billing_inn'])) {
        update_post_meta($order_id, '_billing_inn', sanitize_text_field($_POST['billing_inn']));
    }
}

Отображение поля в админке заказа и в письмах

Чтобы поле отображалось в админке, используйте хук woocommerce_admin_order_data_after_billing_address:

add_action('woocommerce_admin_order_data_after_billing_address', 'wpmarketing_display_custom_field_admin_order', 10, 1);
function wpmarketing_display_custom_field_admin_order($order){
    $inn = get_post_meta($order->get_id(), '_billing_inn', true);
    if ($inn) {
        echo '<p><strong>ИНН:</strong> ' . esc_html($inn) . '</p>';
    }
}

Для отображения в письмах подключите фильтр woocommerce_email_order_meta_fields:

add_filter('woocommerce_email_order_meta_fields', 'wpmarketing_add_custom_field_to_emails');
function wpmarketing_add_custom_field_to_emails($fields) {
    $fields['billing_inn'] = array(
        'label' => 'ИНН',
        'value' => get_post_meta(get_the_ID(), '_billing_inn', true),
    );
    return $fields;
}

Как удалить поля из оформления заказа WooCommerce

Для удаления полей используется тот же фильтр woocommerce_checkout_fields. Ниже пример удаления поля "Company" и "Address 2":

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

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

Обновите страницу оформления заказа и убедитесь, что поля отсутствуют. Если поля остались, проверьте очередь фильтров и возможные конфликты с плагинами или темой.

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

  • Добавьте тестовый заказ, заполните новое поле «ИНН» и завершите оформление.
  • В админке заказа проверьте, что значение поля отображается правильно.
  • Отправьте тестовый заказ, чтобы убедиться, что поле отображается в письме клиенту и администратору.
  • Перейдите на страницу оформления заказа и убедитесь, что удалённые поля отсутствуют.

Частые ошибки и как их исправить

  • Поле не сохраняется в заказе: проверьте правильность имени поля в $_POST и соответствие ключа с префиксом billing_, shipping_ или order_.
  • Поле не отображается в админке: убедитесь, что используете правильный хук woocommerce_admin_order_data_after_billing_address или аналогичный.
  • Удалённое поле всё ещё видно: проверьте, нет ли конфликтов с плагинами, которые могут добавлять поля повторно.
  • Поля не валидируются: добавьте валидацию через хук woocommerce_checkout_process если поле обязательное.

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

  • Обязательно используйте функции очистки данных, например, sanitize_text_field, перед сохранением.
  • Избегайте дублирования кода — выделяйте функции для повторно используемых частей.
  • Для сложных форм с большим количеством полей лучше использовать AJAX-валидацию для улучшения UX.
  • Минимизируйте количество кастомных полей, чтобы не ухудшать производительность оформления заказа.

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

МетодПлюсыМинусыПрименение
Код в functions.phpПолный контроль, нет лишних плагиновТребует навыков, ошибки влияют на сайтМалые и средние правки
Плагины кастомизации полейУдобство, готовые интерфейсыНагрузка, возможные конфликтыБольшие проекты, часто меняющиеся поля
Использование плагинов типа Clearfy ProОптимизация и чистка сайтаНе всегда гибко для кастомных полейОптимизация и SEO
Как корректно удалить зависимые данные от удалённых плагинов WooCommerce
07.05.2026
Как автоматизировать управление купонной историей в WordPress
02.03.2026
Автоматическое удаление незавершённых заказов в WooCommerce: пошаговое руководство
17.05.2026
Как удалить Emoji в WordPress: отключение скриптов и примеры кода
05.12.2025
Как установить автоматические push-уведомления в WordPress
21.02.2026