wpcompany.ru wordpress WPCompany

WooCommerce: как правильно изменить поля оформления заказа

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

Частая задача — адаптировать форму оформления заказа под бизнес-требования: убрать ненужные поля, добавить новые, изменить порядок или обязательность полей. Это необходимо для повышения конверсии, сбора нужных данных и удобства пользователей.

Важно понимать, что WooCommerce использует массивы для описания полей, которые можно фильтровать и модифицировать через хук woocommerce_checkout_fields. Неправильное изменение полей может привести к ошибкам валидации или потере данных.

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

1. Удаление ненужных полей

Чтобы убрать, например, поле «Компания» из биллинговых данных, используйте следующий код в functions.php вашей темы или в плагине для кастомизаций:

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

2. Изменение обязательности и меток полей

Чтобы сделать поле «Телефон» не обязательным и изменить его метку:

add_filter('woocommerce_checkout_fields', 'custom_modify_billing_phone_field');
function custom_modify_billing_phone_field($fields) {
    $fields['billing']['billing_phone']['required'] = false;
    $fields['billing']['billing_phone']['label'] = 'Контактный телефон (не обязательно)';
    return $fields;
}

3. Добавление нового поля, например, «Номер договора»

Добавим кастомное поле в раздел биллинга и сохраним его:

add_filter('woocommerce_checkout_fields', 'custom_add_contract_number_field');
function custom_add_contract_number_field($fields) {
    $fields['billing']['billing_contract_number'] = array(
        'type' => 'text',
        'label' => 'Номер договора',
        'required' => false,
        'class' => array('form-row-wide'),
        'clear' => true
    );
    return $fields;
}

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

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

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

  • Откройте страницу оформления заказа и проверьте, что поля изменились согласно внесённым правкам: ненужных полей нет, новые поля отображаются.
  • Попробуйте оформить заказ с заполнением новых полей, проверьте, что данные сохраняются и отображаются в админке WooCommerce (в карточке заказа).
  • Обратите внимание на валидацию: обязательные поля должны корректно требовать заполнения.

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

  • Ошибка: Поле не отображается на форме.
    Причина: Неправильный ключ массива, например, «billing_contract» вместо «billing_contract_number».
    Решение: Проверьте правильность ключа и структуру массива.
  • Ошибка: Данные не сохраняются в заказе.
    Причина: Отсутствие обработчика сохранения данных через woocommerce_checkout_update_order_meta.
    Решение: Добавьте функцию сохранения, как показано в примере.
  • Ошибка: Поля не проходят валидацию, хотя должны быть необязательными.
    Причина: В поле не указан параметр 'required' => false.
    Решение: Явно укажите обязательность поля.

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

  • Не используйте print_r и var_dump для отладки на боевом сайте — лучше подключить WP_DEBUG_LOG.
  • Санитизируйте все пользовательские данные при сохранении: используйте sanitize_text_field() или более подходящие функции.
  • Если добавляете много полей, группируйте их по разделам, чтобы не создавать перегруженную форму и не ухудшать UX.
  • Для сложных изменений рассмотрите создание дочерней темы или собственного плагина для кастомизаций, чтобы не потерять правки при обновлении.

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

МетодОписаниеПлюсыМинусы
Фильтр woocommerce_checkout_fieldsИзменение массива полейГибко, просто внедрятьМожет потребоваться дополнительный код для сохранения и отображения
Плагины кастомизации checkoutИспользование готовых плагинов (Checkout Field Editor и др.)Удобный UI, быстрое добавлениеМеньше контроля, нагрузка на сайт, возможны конфликты
Полное переопределение шаблоновСоздание собственного шаблона checkoutМаксимальный контроль над формойСложно поддерживать, не подходит для мелких правок
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше