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

Проблема: накопление неактивных товаров в WooCommerce

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

Диагностика: как определить неактивные товары

Под неактивными товарами будем понимать те, у которых:

  • нет продаж за заданный период (например, 6 месяцев);
  • статус товара опубликован, но дата последнего обновления превышает порог;
  • нет активности в виде просмотров или заказов (если есть сбор статистики).

Для простой автоматизации возьмём критерий последнего обновления товара — дата post_modified. Если товар не менялся более 180 дней, его можно считать устаревшим.

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

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

function get_old_woocommerce_products($days = 180) {
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));
    $args = [
        'post_type' => 'product',
        'post_status' => 'publish',
        'date_query' => [
            [
                'column' => 'post_modified',
                'before' => $date_threshold,
            ]
        ],
        'posts_per_page' => -1,
        'fields' => 'ids',
    ];
    $query = new WP_Query($args);
    return $query->posts;
}

2. Функция для массового удаления товаров по ID

function delete_products_by_ids(array $product_ids) {
    foreach ($product_ids as $id) {
        wp_delete_post($id, true); // true — удаление в обход корзины
    }
}

3. Автоматизация через WP-Cron

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

if (!wp_next_scheduled('daily_delete_old_products')) {
    wp_schedule_event(time(), 'daily', 'daily_delete_old_products');
}

add_action('daily_delete_old_products', function() {
    $old_products = get_old_woocommerce_products(180);
    if (!empty($old_products)) {
        delete_products_by_ids($old_products);
    }
});

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

  • Проверьте через админку WooCommerce — устаревшие товары должны исчезнуть.
  • Запустите вручную функцию удаления, если нужно — через WP-CLI: wp eval 'delete_products_by_ids(get_old_woocommerce_products(180));'.
  • Проверьте логи сервера и WordPress на предмет ошибок удаления.
  • Создайте тестовый товар с датой изменения больше 180 дней назад, чтобы убедиться, что он удаляется автоматически.

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

  • Товары не удаляются: проверьте, включен ли WP-Cron, или запустите cron вручную (wp cron event run --due-now).
  • Удаляются товары, которые не должны: убедитесь, что критерий отбора корректен, возможно, нужно добавить дополнительные фильтры (например, по продажам или статусу).
  • Потеря данных: перед внедрением обязательно сделайте резервную копию базы данных.
  • Высокая нагрузка при большом количестве товаров: разбейте удаление на порции, например по 50 товаров за запуск.

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

  • Используйте параметр wp_delete_post с $force_delete = true для полного удаления, но будьте осторожны — восстановление будет невозможно.
  • Добавьте проверку nonce и прав пользователя, если планируете запускать удаление с интерфейса.
  • Для больших магазинов делайте удаление в пакетах — можно хранить состояние удаления через опции WordPress.
  • Логируйте удалённые товары в отдельный файл для последующего аудита.

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

МетодПлюсыМинусы
Ручное удаление через админкуПростой контрольТрудозатратно, ошибки при больших объёмах
Автоматический скрипт с WP-Cron (код)Автоматизация, гибкость настройкиНужно следить за работой cron, возможна нагрузка
Плагины очистки WooCommerceПростота установки, готовые интерфейсыМогут быть перегружены ненужными функциями, влиять на производительность
Как автоматизировать удаление неиспользуемых медиафайлов в WordPress
28.03.2026
WooCommerce: как автоматически изменять стоимость товара при изменении варианта
11.06.2026
Как изменить регистрацию пользователей WordPress через функции
03.12.2025
Как автоматизировать обновление тем в WordPress
25.11.2025
WooCommerce: диагностика и решение проблем с обновлением стоимости товаров
05.05.2026