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 или логи
Плагин для управления статусами и удалениямиИнтерфейс, настройки без кодаУвеличение нагрузки, лишний функционалИспользовать только проверенные плагины
Ручное удаление через админкуПолный контроль, нет риска автоматических ошибокТрудоемко, не подходит для большого каталогаИспользовать для редких случаев
Как удалить неиспользуемые файлы в Media Library WordPress: практические методы и примеры
28.12.2025
Как устроить автоматический отчет о ошибках WordPress с уведомлениями на почту
22.01.2026
Как добавить настройки в админ-панель WordPress
02.12.2025
Как создать собственный тип записи в WordPress: подробное руководство с примерами
29.11.2025
Как отфильтровать записи по полям Advanced Custom Fields в WordPress
15.12.2025