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

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

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

Как определить неактивные товары по дате обновления

Под неактивными товарами будем понимать записи типа product, у которых post_modified старше заданного срока — например, 180 дней.

Проверить дату обновления товаров можно SQL-запросом в базе данных:

SELECT ID, post_title, post_modified FROM wp_posts WHERE post_type = 'product' AND post_status = 'publish' ORDER BY post_modified ASC;

Обратите внимание: wp_ — префикс таблиц, может отличаться в вашей установке.

Пошаговое решение: автоматическое удаление товаров с помощью WP-Cron

1. Создаём функцию для удаления товаров

function wpteam_delete_old_products() {
    $days = 180; // Количество дней неактивности
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = [
        'post_type'      => 'product',
        'post_status'    => ['publish', 'private'],
        'date_query'     => [
            [
                'column' => 'post_modified',
                'before' => $date_threshold,
            ],
        ],
        'fields'         => 'ids',
        'posts_per_page' => -1,
    ];

    $query = new WP_Query($args);

    if (!empty($query->posts)) {
        foreach ($query->posts as $product_id) {
            wp_delete_post($product_id, true); // Полное удаление
        }
    }
}

2. Регистрируем событие WP-Cron, если оно ещё не запланировано

function wpteam_schedule_delete_old_products() {
    if (!wp_next_scheduled('wpteam_cron_delete_old_products')) {
        wp_schedule_event(time(), 'daily', 'wpteam_cron_delete_old_products');
    }
}
add_action('wp', 'wpteam_schedule_delete_old_products');

add_action('wpteam_cron_delete_old_products', 'wpteam_delete_old_products');

3. Добавляем код в файл functions.php вашей темы или в отдельный плагин

После добавления кода функция будет запускаться ежедневно, удаляя товары, не обновлявшиеся больше 180 дней.

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

  • В админке WooCommerce проверьте список товаров: устаревшие должны исчезнуть.
  • Для проверки можно временно установить $days = 1; и создать товар с датой обновления более суток назад — он должен удалиться после срабатывания WP-Cron.
  • В журнале ошибок PHP или с помощью плагина для логов проверьте наличие ошибок при выполнении задания.

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

  • Ошибка: задания WP-Cron не выполняются.
    Причина: WP-Cron зависит от посещений сайта. Если трафик низкий, задачи могут не запускаться.
    Решение: настроить системный cron на сервере, вызывающий wp-cron.php по расписанию.
  • Ошибка: товары не удаляются.
    Причина: неверные параметры в запросе, например, неправильный префикс таблиц или статус товаров.
    Решение: убедитесь, что товары имеют статус publish или private, и используйте WP_Query с корректными аргументами.
  • Ошибка: удаляются нужные товары.
    Причина: слишком большой период или некорректный фильтр.
    Решение: протестируйте на тестовом сайте и подберите оптимальный период неактивности.

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

  • Удаляйте товары только после резервного копирования базы данных.
  • Не используйте wp_delete_post с параметром $force_delete = false, чтобы не оставлять мусор в корзине.
  • Оптимизируйте запросы, ограничивая количество обрабатываемых товаров за один запуск, если их очень много.
  • Для больших магазинов лучше реализовать пакетную обработку с задержками для снижения нагрузки на сервер.

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

МетодПлюсыМинусыКомпромисс
WP-Cron + кастомный кодБез плагинов, гибкая настройка, полный контрольЗависит от посещаемости, требует тестированияНастроить системный cron для надёжности
Плагины автоматизации (например, WP All Import с удалением)Простота установки, готовый функционалМогут грузить сайт, ограниченная кастомизацияИспользовать на небольших сайтах
Ручное удаление через админкуПростота, полная безопасностьТрудозатратно, непрактично для больших каталоговИспользовать для точечной очистки
Как создать автоматическое отправление email в WordPress с помощью WP-Cron
11.02.2026
Как создать автоматический импорт данных из Excel в WordPress
18.12.2025
Как автоматически изменять мета данные постов в WordPress по условию
06.03.2026
WooCommerce: как автоматически удалять товары с нулевым запасом из корзины
05.06.2026
Как добавить автоматический удалённый sitemap в WordPress
14.04.2026

Возникли задачи по WP? Вы можете задать свой вопрос на FAQwp.com Либо обратиться к специалистам поддержки.