wpdownload.ru wordpress WPDownload.ru

WooCommerce: добавление дополнительных пользовательских полей в форму оформления заказа

Почему стоит добавлять дополнительные поля в оформление заказа 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 (для оптимизации и управления)
Создание кастомного плагинаМаксимальная гибкость и переносимостьТребует опыта разработкиРазработка под проект
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙