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

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

При большом ассортименте в WooCommerce часто возникает задача автоматически удалять товары, которые устарели или давно не обновлялись, чтобы не загромождать каталог и не портить пользовательский опыт. Ручное удаление занимает много времени, а плагинов с подобной глубокой автоматизацией мало.

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

Основным критерием может быть дата публикации товара (post_date) или дата последнего обновления (post_modified). Например, товары старше 180 дней считаются устаревшими. Также можно учитывать статус товара или наличие заказов.

Проверка товаров по дате публикации в базе данных

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

Это позволит увидеть самые старые опубликованные товары.

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

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

function delete_old_woocommerce_products() {
    $days_threshold = 180; // товары старше 180 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_threshold . ' days'));

    $args = [
        'post_type'      => 'product',
        'post_status'    => 'publish',
        'date_query'     => [
            [
                'column' => 'post_date',
                'before' => $date_threshold,
            ],
        ],
        'fields'         => 'ids',
        'posts_per_page' => 100,
    ];

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        foreach ($query->posts as $product_id) {
            wp_delete_post($product_id, true); // true - удалить без корзины
        }
    }
}

2. Запуск функции по расписанию с помощью WP-Cron

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

add_action('delete_old_products_daily_event', 'delete_old_woocommerce_products');

Этот код запускает функцию удаления товаров один раз в сутки.

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

  • В админке WooCommerce проверьте количество товаров до и после запуска задачи.
  • В базе данных через phpMyAdmin выполните запрос на поиск товаров с датой старше 180 дней - их должно не быть.
  • Для отладки можно временно добавить логирование удаляемых ID в файл wp-content/debug.log с помощью error_log($product_id);.

Частые ошибки и способы их исправления

  • Неправильный формат даты или временная зона: убедитесь, что date('Y-m-d H:i:s') совпадает с временной зоной сайта (Settings > General).
  • WP-Cron не срабатывает: проверьте, активен ли wp-cron и нет ли конфликтов с плагинами кэширования. Для теста можно вручную запустить задачу через плагин WP Crontrol.
  • Удаляются нужные товары: добавьте дополнительную фильтрацию по меткам, категориям или статусу, чтобы избежать удаления важных позиций.
  • Большая нагрузка при удалении: лимитируйте количество удаляемых товаров за один запуск и используйте транзиенты для отслеживания прогресса.

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

  • Всегда делайте резервную копию базы перед массовым удалением.
  • Для больших магазинов разбивайте удаление на партии по 50-100 товаров.
  • Используйте wp_delete_post($id, true) для полного удаления, иначе товары попадут в корзину и будут занимать место.
  • Ограничьте права на запуск удаления только администраторам, если добавляете интерфейс.

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

МетодПлюсыМинусыКомпромисс
Код на PHP + WP-CronГибко, бесплатно, без лишних плагиновТребует навыков, возможен сбой wp-cronИспользовать WP Crontrol для контроля задач
Плагин для автоматизацииПросто настроить, есть UIМожет быть платным, нагрузка на сайтВыбирать легкие и проверенные плагины
Ручное удалениеПолный контрольОчень трудоемко при большом каталогеИспользовать для мелких магазинов

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать подписи к постам в WordPress: практическое руководство с примерами кода
02.12.2025
Как использовать WooCommerce REST API для управления заказами: практическое руководство
07.05.2026
Как убрать заголовок H1 из страницы WordPress: пошаговое руководство
09.11.2025
Как создать автоматические журналы активности пользователей в WordPress с примерами кода и плагинов
07.01.2026
Как автоматизировать публикацию журнальных статей в WordPress с примерами кода и плагинов
18.02.2026
×
Делай сайт лучше!!

-20% на премиум темы и плагины

Использовать скидку ⋙