Диагностика задачи: зачем добавлять поля в форму оформления заказа WooCommerce
Стандартная форма оформления заказа WooCommerce покрывает большинство бизнес-сценариев, но иногда нужно собрать дополнительные данные от покупателя: комментарии, пожелания, коды скидок, индивидуальные параметры. Без изменения формы и обработки данных это невозможно, поэтому важно понимать, как добавить новые поля и сохранить их в заказе.
Как добавить дополнительное поле в форму оформления заказа WooCommerce
Задача разбивается на два этапа:
- вывод дополнительного поля на страницу оформления заказа;
- сохранение введенного значения в метаданные заказа.
Добавление поля с помощью хука woocommerce_after_order_notes
Пример добавления текстового поля "Дополнительная информация":
add_action('woocommerce_after_order_notes', 'wplock_add_custom_checkout_field');
function wplock_add_custom_checkout_field($checkout) {
echo '<div id="wplock_custom_checkout_field">';
woocommerce_form_field('wplock_custom_field', array(
'type' => 'text',
'class' => array('wplock-custom-field form-row-wide'),
'label' => __('Дополнительная информация'),
'placeholder' => __('Введите дополнительную информацию'),
'required' => false,
), $checkout->get_value('wplock_custom_field'));
echo '</div>';
}Сохранение данных поля в метаданных заказа
Используем хук woocommerce_checkout_update_order_meta:
add_action('woocommerce_checkout_update_order_meta', 'wplock_save_custom_checkout_field');
function wplock_save_custom_checkout_field($order_id) {
if (!empty($_POST['wplock_custom_field'])) {
update_post_meta($order_id, '_wplock_custom_field', sanitize_text_field($_POST['wplock_custom_field']));
}
}Отображение значения поля в админке WooCommerce
Чтобы администратор видел введенную информацию в заказе, добавим вывод в метабоксе заказа:
add_action('woocommerce_admin_order_data_after_billing_address', 'wplock_display_custom_field_admin_order', 10, 1);
function wplock_display_custom_field_admin_order($order){
$custom_field = get_post_meta($order->get_id(), '_wplock_custom_field', true);
if ($custom_field) {
echo '<p><strong>' . __('Дополнительная информация') . ':</strong> ' . esc_html($custom_field) . '</p>';
}
}Пошаговое решение
- Добавьте все три блока кода в файл
functions.phpвашей дочерней темы или в собственный плагин. - Откройте страницу оформления заказа и убедитесь, что поле «Дополнительная информация» отображается ниже стандартных заметок.
- Заполните поле и завершите заказ.
- В админке WooCommerce откройте созданный заказ и проверьте, что дополнительная информация отображается в блоке данных о заказе.
Проверка результата после внедрения
- На фронтенде поле доступно и принимает ввод.
- Значение сохраняется и не теряется при отправке формы.
- В админке WooCommerce при просмотре заказа отображается введённая информация.
- Данные корректно обрабатываются при повторном редактировании заказа (если это предусмотрено).
Частые ошибки и их исправление
- Поле не отображается: проверьте правильность имени функции и подключения хука
woocommerce_after_order_notes. Иногда тема или плагин изменяют шаблон оформления заказа, и хук не срабатывает. - Данные не сохраняются: убедитесь, что имя поля в
$_POSTсовпадает с именем, используемым вwoocommerce_form_fieldи в функции сохранения. - Данные не отображаются в админке: проверьте, что используете правильный хук
woocommerce_admin_order_data_after_billing_addressи корректно получаете метаданные заказа. - Санитизация данных: всегда используйте
sanitize_text_fieldили другие функции для очистки данных перед сохранением, чтобы избежать проблем с безопасностью.
Практические советы по безопасности и производительности
- Не добавляйте обязательные поля без необходимости — это уменьшит риск ошибок при оформлении и снизит нагрузку на поддержку.
- Используйте правильные функции валидации и санитизации. Для сложных типов полей (например, даты, числа) применяйте соответствующие методы.
- Проверяйте совместимость с другими плагинами, которые могут влиять на оформление заказа, например, плагинами кастомизации или оптимизации.
- Для бизнес-критичных данных продумайте резервное копирование метаданных заказа.
Сравнение способов добавления полей в WooCommerce
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Добавление через хуки (как в статье) | Простота, не требует модификации шаблонов, гибкость | Зависит от темы/плагинов, может не работать при кастомных шаблонах | Стандартные темы, небольшие изменения |
| Изменение шаблонов оформления заказа | Полный контроль над разметкой и логикой | Требует поддержки при обновлениях, сложнее | Крупные кастомизации, уникальный дизайн |
| Плагины для кастомизации Checkout | Готовое решение, часто с UI | Зависимость от стороннего кода, нагрузка | Без навыков программирования, быстрые правки |