Автоматическое удаление старых товаров 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Удобство, дополнительные функции оптимизации, поддержкаПлатно, возможно избыточно для простой задачиСредние и крупные магазины, администраторы без кода
Ручное удаление через админкуПросто, не требует кодаНельзя автоматизировать, долго при большом объемеМалые магазины, единичные случаи
Как отключить ревизии в WordPress и ограничить автосохранение без потери удобства редактирования
17.09.2026
Как автоматизировать управление пользовательскими ролями в WordPress
24.09.2026
Как автоматизировать создание и удаление черновиков в WordPress
18.09.2026
Как автоматизировать удаление старых ревизий записей в WordPress
24.09.2026
Автоматизация обновления тем и удаление старых ревизий в WordPress
26.09.2026