WooCommerce: автоматическое изменение статуса и названия товара после покупки в GeneratePress

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

В стандартном WooCommerce товар после продажи остается в каталоге с обычным статусом и названием. Однако в ряде случаев необходимо автоматически изменить статус товара (например, сделать его "временно недоступным" или "закрытым") и модифицировать название (чтобы информировать покупателей о статусе или скидке) сразу после успешной оплаты. Это помогает управлять ограниченными партиями, акциями, или указывать, что товар распродан.

Как определить, что задача актуальна для вашего сайта

  • Вы продаёте ограниченные товары и хотите блокировать повторные покупки после достижения лимита.
  • Необходимо показывать пользователям изменённое название товара после покупки (например, "Продано" или "Ожидается поступление").
  • Хотите автоматизировать процесс обновления статуса без ручного вмешательства.

Пошаговое решение: изменение статуса и названия товара после успешного заказа

1. Используем хук woocommerce_order_status_completed для запуска функции после оплаты

WooCommerce предоставляет хук woocommerce_order_status_completed, который срабатывает, когда заказ переводится в статус "завершён". В эту точку можно добавить нашу логику.

2. Код для изменения статуса товара и модификации названия

add_action('woocommerce_order_status_completed', 'update_products_after_purchase', 10, 1);function update_products_after_purchase($order_id) {    if (!$order_id) return;    $order = wc_get_order($order_id);    if (!$order) return;    foreach ($order->get_items() as $item) {        $product_id = $item->get_product_id();        $product = wc_get_product($product_id);        if (!$product) continue;        // Меняем статус на "черновик" (draft)        $post = array(            'ID' => $product_id,            'post_status' => 'draft'        );        wp_update_post($post);        // Добавляем префикс к названию товара        $new_title = '[Продано] ' . $product->get_name();        // Обновляем заголовок через базовую функцию WP        wp_update_post(array(            'ID' => $product_id,            'post_title' => $new_title        ));    }}

Этот код переводит товар в статус "черновик", скрывая его из каталога, и меняет название, добавляя префикс "[Продано]".

3. Добавление кода в файл functions.php дочерней темы GeneratePress

Чтобы изменения не пропали при обновлении темы, вставьте код в functions.php вашей дочерней темы GeneratePress или используйте плагин для кастомных сниппетов (например, Code Snippets).

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

  1. Оформите тестовый заказ и переведите его в статус "завершён" (если оплата через тестовый шлюз - это происходит автоматически).
  2. Перейдите в админку WordPress > Товары и найдите купленный товар.
  3. Убедитесь, что статус товара изменился на "Черновик" (Draft).
  4. Проверьте, что название товара теперь начинается с префикса "[Продано]".
  5. Зайдите на фронтенд сайта и убедитесь, что товар не отображается в каталоге (или отображается с новым названием, если статус не черновик).

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

  • Товар не меняет статус после оплаты: Проверьте, что заказ переводится в статус "completed". В некоторых магазинах используется статус "processing" — соответственно, нужно использовать другой хук woocommerce_order_status_processing.
  • Название не обновляется: Убедитесь, что у вас нет плагинов или кэширования, которые перезаписывают заголовки товаров. Очистите кэш и попробуйте снова.
  • Продукт остаётся видимым: Статус "draft" скрывает товар, но если нужно, чтобы товар был виден, но с изменённым названием, используйте другой статус или настройте логику отображения через фильтры.
  • Изменения не влияют на вариативные товары: Для вариативных товаров дополнительно нужно изменять дочерние вариации, иначе они останутся доступными.

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

  • Всегда делайте резервную копию сайта перед добавлением кода.
  • Добавляйте проверки на валидность объекта товара и заказа, чтобы избежать ошибок PHP.
  • Если магазин большой и заказ содержит много товаров, оптимизируйте код, чтобы избежать нагрузки на базу данных.
  • Для массовых изменений после покупки лучше использовать очереди или WP-Cron, чтобы не блокировать загрузку страницы.

Сравнение вариантов реализации

МетодПлюсыМинусы
Изменение статуса и названия через хук PHPГибко, быстро, без дополнительных плагиновТребует навыков программирования, возможны ошибки при обновлениях
Использование плагинов автоуправления товарамиПростой интерфейс, поддержка и обновленияЗависимость от стороннего кода, возможные конфликты
Ручное обновление после покупкиПросто для небольших магазиновТрудозатратно, риск пропуска
Как создать адаптивные блоки в WordPress с GeneratePress
02.12.2025
WooCommerce: как удалить атрибуты из фильтра после удаления товара в GeneratePress
02.06.2026
WooCommerce: автоматическое изменение статуса и названия товара после покупки в GeneratePress
29.05.2026
Как создать адаптивный сайт на GeneratePress с использованием CSS Grid
17.03.2026
Как добавить уникальные метаданные для страниц в GeneratePress
09.12.2025