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

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

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

Если такой механизм отсутствует, администраторы вынуждены удалять товары вручную, что приводит к ошибкам и задержкам.

Пошаговое решение: удаление товара при смене статуса публикации

1. Используем хук transition_post_status

Этот хук срабатывает при смене статуса записи, в том числе товаров WooCommerce (тип записи product).

2. Добавляем функцию для проверки статуса и удаления

add_action('transition_post_status', 'auto_delete_product_on_status_change', 10, 3);
function auto_delete_product_on_status_change($new_status, $old_status, $post) {
    // Проверяем, что это товар WooCommerce
    if ($post->post_type !== 'product') {
        return;
    }

    // Удаляем товар, если он переводится в черновик или удаляется
    if (in_array($new_status, array('draft', 'trash'))) {
        // Удаляем товар без отправки в корзину
        wp_delete_post($post->ID, true);
    }
}

3. Размещение кода

Добавьте код в файл functions.php вашей дочерней темы или создайте небольшой плагин, чтобы не потерять изменения при обновлениях.

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

1. Создайте тестовый товар в админке WooCommerce.

2. Измените его статус на Черновик или отправьте в корзину.

3. Обновите страницу списка товаров: тестовый товар должен исчезнуть, так как будет удален принудительно.

4. Для проверки можно использовать следующий SQL-запрос в базе данных (через phpMyAdmin или wp-cli), чтобы убедиться, что товар удален:

SELECT * FROM wp_posts WHERE ID = <ID_товара>;

Если запись отсутствует, удаление прошло успешно.

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

  • Ошибка: Товары не удаляются при смене статуса.
    Причина: Хук transition_post_status не срабатывает из-за неправильных параметров или код расположен в неподходящем месте.
    Решение: Проверьте подключение функции, при необходимости добавьте логирование с error_log для отладки.
  • Ошибка: Удаляются не только товары, но и другие типы записей.
    Причина: Отсутствует проверка типа записи.
    Решение: Добавьте условие if ($post->post_type !== 'product') return;.
  • Ошибка: После удаления возникают ошибки в админке.
    Причина: Конфликты с другими плагинами или хуками.
    Решение: Проверьте совместимость, отключите временно другие плагины для теста.

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

  • Используйте wp_delete_post($post->ID, true) с параметром true, чтобы полностью удалить товар, а не отправлять его в корзину — это снижает нагрузку на базу.
  • Перед массовым внедрением на живом сайте протестируйте на стенде.
  • Если товаров очень много, подумайте о пакетном удалении через WP-CLI для повышения производительности.
  • Регулярно создавайте резервные копии базы данных перед внедрением автоматизированных удалений.

Сравнение вариантов реализации автоматического удаления товаров

МетодПлюсыМинусыКомпромисс
Хук transition_post_status с wp_delete_postАвтоматизация, срабатывает при смене статуса, простота кодаОпасность случайного удаления, требуется тестированиеДобавить подтверждение удаления через UI или логи
Плагин для управления статусами и удалениямиИнтерфейс, настройки без кодаУвеличение нагрузки, лишний функционалИспользовать только проверенные плагины
Ручное удаление через админкуПолный контроль, нет риска автоматических ошибокТрудоемко, не подходит для большого каталогаИспользовать для редких случаев
Как автоматизировать удаление старого контента в WordPress
08.02.2026
Как удалить неиспользуемые метаданные в WordPress для ускорения сайта
10.11.2025
Как создать автоматический экспорт данных WordPress в CSV с примерами кода
15.01.2026
Как создать уникальные отзывы с пользователем в WordPress
29.03.2026
Как удалить неиспользуемые файлы в Media Library WordPress: практические методы и примеры
28.12.2025