Почему стоит добавлять дополнительные поля в оформление заказа WooCommerce
Стандартная форма оформления заказа WooCommerce содержит базовые поля для контактов и адреса. Часто бизнесу нужны свои поля: например, номер налогоплательщика, комментарий к заказу, дата доставки и т.п. Добавление таких полей позволяет собирать больше данных для обработки и персонализации заказа.
Диагностика проблемы: стандартных полей недостаточно
Если вы получаете заявки с недостаточной информацией и хотите расширить форму, проверить текущие поля легко:
- Зайдите в оформление заказа на фронтенде;
- Обратите внимание, какие поля доступны;
- Определите, каких данных не хватает.
Если нет плагина, расширяющего форму, добавление полей придется делать вручную через код или плагины.
Пошаговое решение: добавляем пользовательские поля в форму оформления заказа
1. Добавление поля на страницу оформления заказа
В functions.php вашей темы (лучше дочерней) добавьте код для вывода пользовательского поля, например, поле "Номер налогоплательщика":
add_action('woocommerce_after_order_notes', 'wpdownload_add_tax_number_field');
function wpdownload_add_tax_number_field( $checkout ) {
echo '<div id="wpdownload_tax_number_field">';
woocommerce_form_field( 'tax_number', array(
'type' => 'text',
'class' => array('tax-number form-row-wide'),
'label' => __('Номер налогоплательщика'),
'placeholder' => __('Введите ИНН'),
'required' => true,
), $checkout->get_value( 'tax_number' ));
echo '</div>';
}2. Валидация поля при отправке формы
Чтобы гарантировать, что поле заполнено, используем хук:
add_action('woocommerce_checkout_process', 'wpdownload_validate_tax_number_field');
function wpdownload_validate_tax_number_field() {
if ( ! $_POST['tax_number'] ) {
wc_add_notice( __('Пожалуйста, введите номер налогоплательщика.'), 'error' );
}
}3. Сохранение данных поля в заказе
Чтобы данные сохранились и были доступны в админке и письмах, добавьте:
add_action('woocommerce_checkout_update_order_meta', 'wpdownload_save_tax_number_field');
function wpdownload_save_tax_number_field( $order_id ) {
if ( ! empty( $_POST['tax_number'] ) ) {
update_post_meta( $order_id, 'tax_number', sanitize_text_field( $_POST['tax_number'] ) );
}
}4. Отображение поля в админке заказов
Чтобы менеджеры видели поле, добавьте этот код:
add_action('woocommerce_admin_order_data_after_billing_address', 'wpdownload_display_tax_number_admin_order', 10, 1);
function wpdownload_display_tax_number_admin_order($order){
$tax_number = get_post_meta( $order->get_id(), 'tax_number', true );
if($tax_number){
echo '<p><strong>Номер налогоплательщика:</strong> ' . esc_html($tax_number) . '</p>';
}
}5. Добавление поля в письма с заказом
Для включения поля в письма клиента и администратора:
add_action( 'woocommerce_email_customer_details', 'wpdownload_add_tax_number_to_email', 20, 3 );
function wpdownload_add_tax_number_to_email( $order, $sent_to_admin, $plain_text ) {
$tax_number = get_post_meta( $order->get_id(), 'tax_number', true );
if ( $tax_number ) {
if ( $plain_text ) {
echo "Номер налогоплательщика: " . $tax_number . "\n";
} else {
echo '<p><strong>Номер налогоплательщика:</strong> ' . esc_html($tax_number) . '</p>';
}
}
}Проверка результата после внедрения
- Зайдите на страницу оформления заказа — поле "Номер налогоплательщика" должно отображаться;
- Попробуйте оформить заказ без заполнения — должна появиться ошибка;
- После оформления заказа зайдите в админку WooCommerce → Заказы и откройте заказ — поле должно отображаться в блоке с адресом платежа;
- Проверьте письма о новом заказе — пользовательское поле должно присутствовать.
Частые ошибки и как их исправить
- Поле не отображается на форме: проверьте, правильно ли подключен хук
woocommerce_after_order_notesи нет ли конфликтов с темой или плагинами. - Ошибка валидации не срабатывает: убедитесь, что имя поля
tax_numberсовпадает везде и что$_POST['tax_number']доступен. - Данные не сохраняются: проверьте, вызывается ли функция сохранения и нет ли ошибок в sanitize или update_post_meta.
- Поле не отображается в письмах: проверьте, что хук
woocommerce_email_customer_detailsправильно используется и что функция корректно выводит HTML или текст.
Практические советы по безопасности и производительности
- Всегда используйте
sanitize_text_field()или другие функции очистки данных перед сохранением. - Не делайте поле обязательным, если оно не критично, чтобы не блокировать оформление.
- Для сложных полей (даты, селекты) используйте соответствующие типы и валидацию.
- Если добавляете много полей, рассмотрите создание отдельного плагина, чтобы не терять код при смене темы.
Сравнение способов добавления полей в WooCommerce
| Метод | Преимущества | Недостатки | Пример |
|---|---|---|---|
| Код в functions.php | Легко кастомизировать, не зависит от плагинов | При смене темы код теряется, требует навыков | Пример выше |
| Плагины (Checkout Field Editor) | Удобный интерфейс, быстро | Зависимость от плагина, возможны конфликты | Clearfy Pro (для оптимизации и управления) |
| Создание кастомного плагина | Максимальная гибкость и переносимость | Требует опыта разработки | Разработка под проект |