Диагностика задачи: зачем менять название и описание товара после покупки
Иногда возникает необходимость модифицировать данные товара после оформления заказа. Например, для отображения персонализированной информации, статуса заказа или добавления уникальных деталей покупателю. В стандартном WooCommerce данные товара в заказе фиксированы и не меняются автоматически.
Задача: реализовать изменение названия и описания товара именно в деталях заказа, не затрагивая оригинальные данные в каталоге, чтобы покупатель видел актуальную информацию в личном кабинете и письмах.
Как работает хранение данных товара в заказе WooCommerce
При оформлении заказа WooCommerce копирует основные данные товара (название, цена, описание) в объект WC_Order_Item_Product. После этого любые изменения в каталоге не влияют на данные уже созданных заказов.
Для изменения отображаемых данных в заказе нужно работать с фильтрами, применяемыми при выводе деталей заказа и письмах.
Пошаговое решение: изменение названия и описания товара в заказе
Шаг 1. Создать фильтр для изменения названия товара в заказе
Используем фильтр 'woocommerce_order_item_name', который позволяет модифицировать название товара в заказе.
add_filter('woocommerce_order_item_name', 'custom_order_item_name', 10, 3);
function custom_order_item_name($item_name, $item, $is_visible) {
// Получаем ID товара
$product_id = $item->get_product_id();
// Получаем ID заказа
$order_id = $item->get_order_id();
// Добавляем постфикс, например, статус заказа
$order = wc_get_order($order_id);
if ($order && $order->has_status('completed')) {
$item_name .= ' (Завершён)';
}
return $item_name;
}Шаг 2. Изменение описания товара в деталях заказа
Описание товара не выводится по умолчанию в заказах. Чтобы добавить или изменить описание, нужно подключить вывод кастомного поля при просмотре заказа.
Можно добавить дополнительный блок с описанием через хук 'woocommerce_order_item_meta_end':
add_action('woocommerce_order_item_meta_end', 'custom_order_item_description', 10, 3);
function custom_order_item_description($item_id, $item, $order) {
$product = $item->get_product();
if (!$product) return;
// Получаем описание товара
$description = $product->get_short_description(); // либо get_description()
// Модифицируем описание, например добавляем индивидуальные детали
if ($order->has_status('completed')) {
$description .= ' \nСпасибо за покупку! Ваш заказ обработан.';
}
echo '<p class="custom-product-description">' . nl2br(esc_html($description)) . '</p>';
}Шаг 3. Добавление стилей для описания
Для корректного отображения добавляем CSS в файл стилей темы или через Customizer:
.custom-product-description {
font-size: 0.9em;
color: #555;
margin-top: 5px;
}Проверка результата после внедрения
- Оформите заказ с тестовым товаром;
- Перейдите в Личный кабинет → Мои заказы → Просмотр заказа;
- Проверьте, что название товара дополнено (например, «(Завершён)» при статусе completed);
- В описании товара отображается дополнительный текст;
- Проверьте отправку письма с деталями заказа — название должно изменяться, описание при необходимости можно добавить через шаблоны email.
Частые ошибки и их исправление
- Изменения не отображаются: очистите кэш сайта и браузера, убедитесь, что фильтры подключены в functions.php дочерней темы или в плагине, а не в родительской теме, которая может обновляться.
- Описание не выводится: по умолчанию WooCommerce не показывает описание товара в заказах, нужно добавить вывод вручную через хук
woocommerce_order_item_meta_end. - Фильтр применяется везде: если нужно менять название только в личном кабинете, добавьте проверку на контекст, например,
if (is_account_page()) { ... }.
Практические советы по производительности и безопасности
- Не выполняйте тяжелых запросов или внешних API в фильтрах вывода заказа — это замедлит страницу;
- Экранируйте все выводимые данные через
esc_html()илиesc_attr()для безопасности; - Для сложных изменений лучше использовать дочернюю тему или отдельный плагин, чтобы не потерять правки при обновлении GeneratePress и WooCommerce;
- Если нужно добавить данные в email, рекомендуется создавать переопределение шаблонов WooCommerce в вашей теме и добавлять кастомные части там.
Сравнение вариантов реализации изменения данных товара в заказе
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
Фильтр woocommerce_order_item_name | Изменение названия товара на лету при выводе | Легко подключить, не влияет на базу данных | Изменения только при выводе, не сохраняются в БД |
Вывод описания через woocommerce_order_item_meta_end | Добавление описания в детали заказа | Гибкость вывода, можно форматировать | Не изменяет данные товара, только визуальное отображение |
| Редактирование данных в БД после покупки | Прямое изменение данных заказа в базе | Постоянные изменения, видны во всех местах | Риск сломать данные, требует аккуратности, сложно поддерживать |