Использование WooCommerce Order Meta для хранения дополнительных данных заказа

Что такое Order Meta в WooCommerce и зачем он нужен

Order Meta — это способ сохранить дополнительные пользовательские данные в заказах WooCommerce. Это могут быть любые данные, которые не входят в стандартные поля заказа, например, пожелания клиента, номер подарочной карты, данные о доставке или особые инструкции.

Использование Order Meta позволяет добавить к заказу любую информацию, которая нужна для вашего бизнеса, не модифицируя ядро WooCommerce.

Диагностика: когда и почему стоит использовать Order Meta

Если у вас есть задача добавить в заказ нестандартные поля, которые нужны для бизнес-логики (например, дата доставки, код скидки, дополнительные услуги), и эти данные нужно сохранить, отобразить в админке и использовать в обработке, то Order Meta — оптимальный инструмент.

Проверить, что Order Meta необходим, можно так:

  • В стандартных характеристиках заказа нет нужного поля.
  • Данные должны быть связаны именно с заказом, а не с пользователем или товаром.
  • Нужно сохранить данные на уровне заказа и получить к ним доступ в процессе обработки.

Пошаговое решение: добавление и использование Order Meta в WooCommerce

1. Добавление пользовательского поля в форму оформления заказа

Для добавления пользовательского поля используйте хук woocommerce_checkout_fields. Например, добавим поле "Номер подарочной карты":

add_filter('woocommerce_checkout_fields', function($fields) {
    $fields['billing']['gift_card_number'] = [
        'type'        => 'text',
        'label'       => 'Номер подарочной карты',
        'required'    => false,
        'class'       => ['form-row-wide'],
        'priority'    => 120,
    ];
    return $fields;
});

2. Валидация пользовательского поля

Чтобы проверить введённые данные, используйте хук woocommerce_checkout_process:

add_action('woocommerce_checkout_process', function() {
    if ( isset($_POST['gift_card_number']) && !empty($_POST['gift_card_number']) ) {
        if (strlen($_POST['gift_card_number']) < 5) {
            wc_add_notice('Номер подарочной карты должен содержать не менее 5 символов', 'error');
        }
    }
});

3. Сохранение данных в Order Meta

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

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

4. Отображение Order Meta в админке WooCommerce

Чтобы видеть дополнительное поле в деталях заказа в админке, добавьте следующий код:

add_action('woocommerce_admin_order_data_after_billing_address', function($order){
    $gift_card = get_post_meta($order->get_id(), '_gift_card_number', true);
    if ($gift_card) {
        echo '<p><strong>Номер подарочной карты:</strong> ' . esc_html($gift_card) . '</p>';
    }
});

5. Использование данных Order Meta в email уведомлениях

Чтобы добавить дополнительные данные в письмо клиенту и администратору, используйте фильтр woocommerce_email_order_meta_fields:

add_filter('woocommerce_email_order_meta_fields', function($fields, $sent_to_admin, $order) {
    $gift_card = get_post_meta($order->get_id(), '_gift_card_number', true);
    if ($gift_card) {
        $fields['gift_card_number'] = [
            'label' => 'Номер подарочной карты',
            'value' => $gift_card,
        ];
    }
    return $fields;
}, 10, 3);

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

  • Перейдите на страницу оформления заказа и убедитесь, что поле "Номер подарочной карты" отображается.
  • Попробуйте отправить форму с некорректным значением (меньше 5 символов) — должна появиться ошибка.
  • Оформите заказ с заполненным полем, затем откройте заказ в админке WooCommerce — дополнительное поле должно отображаться.
  • Проверьте email уведомления — поле "Номер подарочной карты" должно быть в письмах.

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

  • Данные не сохраняются в заказе: проверьте правильность ключа $_POST['gift_card_number'] и наличие хука woocommerce_checkout_update_order_meta.
  • Поле не отображается на странице оформления заказа: убедитесь, что функция добавления поля подключена и нет ошибок PHP.
  • Данные не показываются в админке: проверьте, что используете правильный хук woocommerce_admin_order_data_after_billing_address и ключ мета _gift_card_number.
  • Ошибка в email уведомлениях: убедитесь в правильности фильтра и что возвращаете массив с нужными ключами.

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

  • Всегда используйте функции очистки данных, например, sanitize_text_field(), перед сохранением в мета.
  • Для числовых или специальных полей используйте соответствующие функции валидации.
  • Не храните в Order Meta избыточные или чувствительные данные без шифрования.
  • Минимизируйте количество дополнительных запросов к базе — используйте методы объекта WC_Order для получения метаданных.

Сравнение способов добавления дополнительных данных заказа

МетодПлюсыМинусыПример
Плагины для пользовательских полей (например, Checkout Field Editor)Простота, интерфейс без кодаЗависимость от стороннего ПО, ограниченная гибкостьClearfy
Код на functions.php или плагин с хуками WooCommerceМаксимальная гибкость, контроль, производительностьТребует навыков PHP, поддержка собственного кодаПример из статьи
Как создать и использовать каскадные шаблоны в WordPress для гибкой настройки сайта
05.03.2026
Как создать автоматические снимки (thumbnail) для изображений в WordPress
30.03.2026
WooCommerce: как удалить варианты товаров по условию через код
10.07.2026
Использование WooCommerce Order Meta для хранения дополнительных данных заказа
07.07.2026
Как использовать WP-Cron для решения проблем с отключенным Cron в WooCommerce
13.07.2026