Проблема: зачем нужны метки к заказам WooCommerce через WPForms
Часто при использовании WPForms для сбора информации, связанной с заказами WooCommerce, возникает задача автоматически добавлять к заказам метки (теги) в зависимости от данных формы. Это помогает организовать заказы, фильтровать их и автоматизировать процессы обработки.
По умолчанию WooCommerce не поддерживает метки к заказам, но можно использовать пользовательские таксономии или поля для имитации меток. В статье разберём, как интегрировать WPForms с WooCommerce, чтобы при отправке формы автоматически добавлять заказу нужные метки.
Диагностика: как понять, что метки не добавляются или добавляются неправильно
- Заказ создаётся, но метки отсутствуют
- Метки появляются не те, которые передавались из формы
- Появляются ошибки в логах при сохранении заказа
- Данные формы не связаны с заказом
Для начала проверьте, что в вашей теме или плагинах есть поддержка меток для заказов, либо реализована пользовательская таксономия.
Проверьте, что WPForms корректно отправляет данные и вы умеете перехватывать событие создания заказа.
Пошаговое решение: добавление меток к заказам WooCommerce после отправки формы WPForms
1. Создайте пользовательскую таксономию для заказов (если её нет)
Добавьте в functions.php вашей темы или в отдельный плагин следующий код:
add_action('init', function() {
register_taxonomy('order_tag', 'shop_order', [
'label' => 'Метки заказов',
'public' => false,
'show_ui' => true,
'show_in_quick_edit' => true,
'hierarchical' => false,
'rewrite' => false,
]);
});Это создаст таксономию "order_tag", позволяющую добавлять метки к заказам.
2. Настройте WPForms для передачи нужного поля с метками
В форме WPForms создайте поле (например, текстовое или select), которое будет содержать метки для заказа. Важно, чтобы значение было разделено запятыми, если меток несколько.
Обратите внимание на ID этого поля, например, field_5.
3. Добавьте код для обработки отправки формы и добавления меток к заказу
WPForms генерирует событие wpforms_process_complete, на котором можно получить данные и обработать заказ.
add_action('wpforms_process_complete', function($fields, $entry, $form_data) {
// Проверьте ID формы
if ($form_data['id'] !== 123) return; // замените 123 на ID вашей формы
// Получаем ID заказа из поля (например, если заказ создаётся отдельно, передайте ID
// или создайте заказ здесь)
$order_id = 456; // Здесь нужно получить или создать заказ, пример статичный
$order = wc_get_order($order_id);
if (!$order) return;
// Получаем значение поля с метками
$tags_field_id = 5; // ID поля с метками
$tags_value = '';
foreach ($fields as $field) {
if ($field['id'] === $tags_field_id) {
$tags_value = $field['value'];
break;
}
}
if (!$tags_value) return;
$tags = array_map('trim', explode(',', $tags_value));
// Добавляем метки к заказу
foreach ($tags as $tag) {
wp_set_object_terms($order_id, $tag, 'order_tag', true); // true — добавляет, не заменяет
}
$order->save();
}, 10, 3);Этот код добавляет метки из поля формы к заказу WooCommerce.
4. Как связать форму с заказом
Частая задача — создать заказ на основе данных формы, либо получить существующий заказ по ID или email. Если заказ создаётся отдельно, передайте его ID для добавления меток.
Если хотите создавать заказ из формы, используйте WC API:
use Automattic\WooCommerce\Client;
// Пример создания заказа (упрощённый)
$order = wc_create_order();
// Добавьте товары и т.д.
$order->set_billing_email($email);
$order->calculate_totals();
$order->save();Как проверить, что метки добавились
- В админке WooCommerce откройте заказ и посмотрите метки (обычно в боковой панели или внизу страницы заказа)
- Через базу данных проверьте таблицы
wp_term_relationshipsиwp_termsдля связи с заказом - Выведите метки в шаблоне заказа, например,
print_r(wp_get_object_terms($order_id, 'order_tag'));
Частые ошибки и как их исправить
- Метки не появляются: проверьте регистрацию таксономии, она должна быть зарегистрирована до инициализации WooCommerce (hook
init) - Поля формы не передаются: убедитесь, что ID поля указан правильно и данные в нужном формате
- Не найден заказ: логика получения или создания заказа должна быть корректной, иначе метки некуда добавлять
- Конфликты с другими плагинами: отключите другие плагины, влияющие на заказы, для проверки
Практические советы по безопасности и производительности
- Проверяйте и фильтруйте пользовательские данные перед добавлением меток, чтобы избежать XSS и инъекций
- Кэшируйте результаты, если делаете выборки по меткам, чтобы снизить нагрузку на базу
- Используйте транзакции WooCommerce при создании и обновлении заказов, чтобы избежать частичного сохранения
- При большом количестве меток не используйте слишком длинные строки — лучше разбивать на несколько полей
Сравнение способов добавления меток к заказам WooCommerce
| Способ | Плюсы | Минусы | Пример |
|---|---|---|---|
| Пользовательская таксономия | Удобно для фильтрации и админки | Требует регистрации и поддержки | register_taxonomy + wp_set_object_terms |
| Пользовательские метаполя заказа | Простое хранение данных | Сложнее фильтровать и искать | update_post_meta($order_id, 'order_tags', $tags) |
| Плагины для тегов заказов | Готовое решение | Зависимость от стороннего кода | WooCommerce Order Tags |