Как использовать хуки WooCommerce для добавления собственного поля на страницу оплаты

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

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

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

Выбор хуков для добавления и обработки поля

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

  • woocommerce_after_order_notes — добавляет поле после стандартных заметок к заказу;
  • woocommerce_checkout_update_order_meta — сохраняет данные поля в метаполя заказа;
  • woocommerce_admin_order_data_after_billing_address — отображает данные поля в админке заказа;
  • woocommerce_checkout_fields — позволяет модифицировать поля формы.

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

add_action('woocommerce_after_order_notes', 'wptalk_add_custom_checkout_field');
function wptalk_add_custom_checkout_field($checkout) {
    echo '<div id="wptalk_custom_checkout_field">';
    woocommerce_form_field('wptalk_custom_field', array(
        'type' => 'text',
        'class' => array('wptalk-custom-field form-row-wide'),
        'label' => __('Подарочное послание'),
        'placeholder' => __('Введите текст послания'),
        'required' => false,
    ), $checkout->get_value('wptalk_custom_field'));
    echo '</div>';
}

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

add_action('woocommerce_admin_order_data_after_billing_address', 'wptalk_display_custom_field_admin_order', 10, 1);
function wptalk_display_custom_field_admin_order($order){
    $custom_field = get_post_meta($order->get_id(), 'wptalk_custom_field', true);
    if ($custom_field) {
        echo '<p><strong>Подарочное послание:</strong> ' . esc_html($custom_field) . '</p>';
    }
}

Пошаговое решение

  1. Вставьте приведённый выше код в файл functions.php активной темы или в функциональный плагин.
  2. Откройте страницу оформления заказа, убедитесь, что поле «Подарочное послание» отображается после заметок к заказу.
  3. Оформите тестовый заказ, заполнив поле и завершив покупку.
  4. В админке WooCommerce откройте заказ и проверьте, что введённое значение отображается под адресом оплаты.

Как проверить результат

  • На фронтенде — поле должно отображаться и быть доступным для заполнения.
  • В базе — значение должно сохраняться в метаполе wptalk_custom_field (проверьте через phpMyAdmin или WP CLI: wp post meta get <order_id> wptalk_custom_field).
  • В админке — поле должно отображаться в карточке заказа.

Частые ошибки и пути их решения

  • Поле не отображается на странице оформления заказа. Проверьте, что код подключён и нет конфликтов с темой или плагинами, которые переопределяют шаблоны чек-аута.
  • Данные не сохраняются. Убедитесь, что name поля совпадает с ключом в $_POST, и что вы используете sanitize_text_field() или другую функцию очистки.
  • Поле не отображается в админке. Проверьте правильность хука woocommerce_admin_order_data_after_billing_address и что функция принимает объект заказа.

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

  • Обязательно фильтруйте и валидируйте все пользовательские данные перед сохранением, чтобы избежать XSS и инъекций.
  • Для сложных полей (например, чекбоксы, селекты) используйте проверку допустимых значений.
  • Не добавляйте слишком много дополнительных полей, чтобы не замедлять загрузку страницы оформления заказа.
  • Если нужно добавить много полей — рассмотрите создание отдельного плагина вместо правок в functions.php для удобства поддержки.

Сравнение способов добавления собственного поля на страницу оплаты WooCommerce

МетодПреимуществаНедостатки
Использование хуков и функций (как выше)Полный контроль, минимум зависимостей, интеграция с заказомТребует навыков программирования
Плагины для кастомных полей (например, Checkout Field Editor)Простота настройки, визуальный интерфейсЗависимость от стороннего плагина, возможные конфликты
Редактирование шаблонов WooCommerceГибкость в выводеСложно поддерживать при обновлениях, риск ошибок
Как избежать конфликтов между WooCommerce и другими плагинами WordPress
23.04.2026
Как изменить URL авторского блога в WordPress
29.03.2026
Как удалить повторяющиеся посты в WordPress с помощью кода
02.04.2026
Как удалить повторяющиеся посты в WordPress с помощью кода
13.04.2026
Как избежать проблем с разрешением файлов в WooCommerce при загрузке изображений товаров
19.05.2026