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

Почему нужно удалять старые товары в WooCommerce

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

Как диагностировать наличие старых товаров для удаления

Для начала определитесь с критериями «старого» товара. Обычно это дата публикации или дата последнего обновления товара. Чтобы проверить, сколько таких товаров у вас есть, используйте SQL-запрос напрямую через phpMyAdmin или WP-CLI:

SELECT ID, post_title, post_date FROM wp_posts WHERE post_type = 'product' AND post_date < DATE_SUB(NOW(), INTERVAL 1 YEAR);

Этот запрос покажет товары старше 1 года. Если количество значительное — стоит автоматизировать их удаление.

Пошаговое решение: автоматизация удаления старых товаров с помощью кода

Создаем функцию удаления

Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:

function wpguest_delete_old_woocommerce_products() {
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'date_query'     => array(
            array(
                'before' => '1 year ago',
            ),
        ),
        'fields'         => 'ids',
        'post_status'    => array('publish', 'draft', 'pending'),
    );

    $old_products = get_posts($args);

    if (!empty($old_products)) {
        foreach ($old_products as $product_id) {
            wp_delete_post($product_id, true); // true — удалить без возможности восстановления
        }
    }
}

Запускаем функцию по расписанию

Чтобы не запускать вручную, используйте WP-Cron. Добавьте следующий код:

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

add_action('wpguest_delete_old_products_hook', 'wpguest_delete_old_woocommerce_products');

Этот код запустит удаление старых товаров каждый день.

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

  • Проверьте в WooCommerce раздел «Товары» — старые товары должны исчезнуть.
  • Запустите вручную функцию из консоли WP-CLI для проверки:
    wp eval 'wpguest_delete_old_woocommerce_products();'
  • Просмотрите логи сервера или логи ошибок PHP на предмет сбоев.

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

  • Товары не удаляются: Проверьте, что функция вызывается и не возникает ошибок. Добавьте error_log внутри цикла, чтобы отследить процесс.
  • Удаляются не те товары: Уточните дату в параметре 'before'. Можно вывести выборку товаров перед удалением для проверки.
  • Проблемы с WP-Cron: Если WP-Cron не срабатывает, настройте системный cron или используйте плагин для мониторинга WP-Cron.

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

  • Перед массовым удалением сделайте резервную копию базы данных.
  • Если товаров очень много, разбивайте удаление на партии, чтобы избежать таймаутов:
function wpguest_delete_old_products_batch($batch_size = 50) {
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => $batch_size,
        'date_query'     => array(
            array('before' => '1 year ago'),
        ),
        'fields'         => 'ids',
        'post_status'    => array('publish', 'draft', 'pending'),
    );

    $old_products = get_posts($args);

    if (!empty($old_products)) {
        foreach ($old_products as $product_id) {
            wp_delete_post($product_id, true);
        }
        return true; // Есть еще товары
    }
    return false; // Товары закончились
}
  • Используйте этот подход с повторным запуском через WP-Cron или ручной триггер.
  • Для крупных магазинов рассмотрите плагин Clearfy Pro для оптимизации и удаления устаревших данных.

Сравнение методов удаления старых товаров WooCommerce

МетодПлюсыМинусыРекомендуется для
Код в functions.php + WP-CronПолный контроль, бесплатно, можно кастомизироватьНужны навыки кода, риск ошибокРазработчики, магазины с контролем хостинга
Плагины типа Clearfy ProУдобство, дополнительные функции оптимизации, поддержкаПлатно, возможно избыточно для простой задачиСредние и крупные магазины, администраторы без кода
Ручное удаление через админкуПросто, не требует кодаНельзя автоматизировать, долго при большом объемеМалые магазины, единичные случаи
Как автоматизировать удаление неиспользуемых вариативных изображений WooCommerce
12.05.2026
Как удалить заблокированных пользователей в WordPress с помощью кода
07.01.2026
Как создать собственный плагин WordPress с настройками
10.11.2025
Автоматическое удаление возвращённых и отменённых заказов WooCommerce
02.07.2026
Как автоматизировать удаление устаревших transient в WordPress
07.03.2026