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

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

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

По умолчанию WordPress не удаляет записи при смене статуса — они просто меняют статус, оставаясь в базе. Поэтому нужно написать кастомный код, который удалит товар сразу после изменения статуса на нежелательный.

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

1. Подключаем хук transition_post_status

Для отслеживания смены статуса записи используется хук transition_post_status. Он позволяет получить старый и новый статус, а также ID записи.

2. Проверяем, что тип записи — product и новый статус — нужный для удаления

В нашем примере будем удалять товары, которые переводят в статус draft или pending. В других случаях — не трогаем.

3. Вызываем функцию удаления записи wp_delete_post с принудительным удалением

Важно вызвать wp_delete_post($post_id, true), где второй параметр true — чтобы удалить товар без помещения в корзину.

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) {
    if ($post->post_type !== 'product') {
        return;
    }

    // Статусы при которых удаляем товар
    $statuses_to_delete = ['draft', 'pending'];

    if (in_array($new_status, $statuses_to_delete) && $new_status !== $old_status) {
        // Удаляем товар без помещения в корзину
        wp_delete_post($post->ID, true);
    }
}

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

  1. Перейдите в админку WooCommerce → Товары.
  2. Выберите любой опубликованный товар и измените его статус на «Черновик» или «Ожидает проверки».
  3. Сохраните изменения.
  4. Обновите список товаров — товар должен исчезнуть полностью, а не просто сменить статус.
  5. Для контроля можно проверить базу данных, таблицу wp_posts, чтобы убедиться, что запись удалена.

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

  • Товар не удаляется при смене статуса: проверьте, что хук подключен правильно и файл с кодом загружается (например, functions.php вашей темы или плагина). Для отладки добавьте error_log внутри функции.
  • Удаляются не только товары: убедитесь, что проверка типа записи $post->post_type === 'product' корректно работает.
  • Удаление происходит при каждом сохранении: добавьте проверку, что старый и новый статус отличаются, чтобы избежать повторного удаления.
  • Проблемы с правами доступа: функция wp_delete_post требует прав администратора. Убедитесь, что код выполняется в контексте с нужными правами.

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

  • Добавляйте логи для отслеживания удалений, особенно на живом сайте.
  • Используйте резервное копирование перед внедрением автоматических удалений.
  • Если в магазине много товаров, удаление может нагрузить базу — рассмотрите пакетное удаление с WP-CLI.
  • Для контроля можно отправлять уведомления администратору о каждом удалении через wp_mail.

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

МетодПлюсыМинусыПример
Хук transition_post_status + wp_delete_post Простота, точечное удаление, не требует плагинов Нужно аккуратно писать код, может удалить товар без проверки Пример из статьи
Плагин для массового удаления товаров Графический интерфейс, безопасный пакетный режим Не всегда поддерживает автоматическое удаление по статусу WooCommerce Bulk Delete и аналоги
WP-CLI скрипты для удаления Высокая производительность, можно запускать по расписанию Требует командной строки и навыков администратора сервера wp post delete $(wp post list --post_type=product --post_status=draft --field=ID) --force
Как сделать автоматический откат обновлений WordPress при ошибках
28.02.2026
Как создать автоматические обновления данных в WordPress с помощью WP-Cron
22.12.2025
Как создать автоматический отпускающий посты в WordPress
05.04.2026
WooCommerce: как автоматически удалять незаконченные заказы по времени
16.07.2026
Как защитить WordPress от взломов и хакеров
04.03.2026