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

Диагностика проблемы: зачем и когда нужно автоматическое удаление товаров

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

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

Для выбора товаров под удаление можно использовать следующие параметры:

  • Статус товара (publish, draft, pending, private и т.д.)
  • Дата создания или последнего обновления (например, старше 6 месяцев)
  • Наличие запасов (товары с нулевым запасом)
  • Категории или метки (например, товары из категории "Архив")

В этой статье мы рассмотрим удаление товаров по статусу и дате создания.

Пошаговое решение: создание WP-Cron задачи для удаления товаров

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

function wponline_delete_old_products() {
    // Параметры: статус 'draft', дата создания старше 180 дней
    $args = [
        'post_type'      => 'product',
        'post_status'    => 'draft',
        'date_query'     => [
            [
                'column' => 'post_date',
                'before' => '180 days ago',
            ],
        ],
        'posts_per_page' => -1,
        'fields'         => 'ids',
    ];

    $query = new WP_Query($args);

    if (!$query->have_posts()) {
        return;
    }

    foreach ($query->posts as $product_id) {
        wp_delete_post($product_id, true); // true - без перемещения в корзину
    }
}

2. Регистрируем событие WP-Cron для ежедневного запуска

function wponline_schedule_delete_old_products() {
    if (!wp_next_scheduled('wponline_daily_delete_old_products')) {
        wp_schedule_event(time(), 'daily', 'wponline_daily_delete_old_products');
    }
}
add_action('wp', 'wponline_schedule_delete_old_products');
add_action('wponline_daily_delete_old_products', 'wponline_delete_old_products');

3. Добавляем возможность ручного запуска функции для тестирования

add_action('admin_post_wponline_delete_old_products', function() {
    if (!current_user_can('manage_options')) {
        wp_die('Нет доступа');
    }
    wponline_delete_old_products();
    wp_redirect(admin_url('tools.php?deleted=1'));
    exit;
});

Таким образом, вы можете перейти по URL https://ваш-сайт/wp-admin/admin-post.php?action=wponline_delete_old_products для запуска удаления вручную.

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

  • Проверьте наличие товаров со статусом draft и датой создания старше 180 дней в админке WooCommerce - они должны исчезнуть после запуска задачи.
  • Для проверки WP-Cron используйте плагин WP Crontrol — он покажет запланированные задачи.
  • Запустите ручное удаление через адрес, описанный выше, и убедитесь, что товары удаляются.

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

  • Задача WP-Cron не запускается: Убедитесь, что на сайте есть посещения (WP-Cron запускается при загрузке страниц). Для точного запуска используйте системный cron и WP-CLI.
  • Неверные параметры запроса: Проверьте правильность аргументов в WP_Query, особенно post_status и date_query.
  • Права доступа: Убедитесь, что функция запускается от пользователя с правами на удаление постов.
  • Удаление не происходит: Проверьте, не блокирует ли плагин защиту от массового удаления или есть ли ошибки в логах PHP.

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

  • Всегда делайте резервные копии перед автоматическим удалением данных.
  • Для больших магазинов используйте постраничный обход с posts_per_page и offset, чтобы не перегружать сервер.
  • Запускайте WP-Cron задачи в период низкой нагрузки на сайт.
  • Логируйте действия удаления в отдельный файл для последующего аудита.
  • Проверяйте, что удаление происходит только по нужным критериям, чтобы избежать потери данных.

Сравнение подходов к автоматическому удалению товаров

МетодПлюсыМинусыПример
WP-Cron + собственный код Гибко, без сторонних плагинов, точечное удаление Зависит от посещаемости сайта, требует навыков разработки Код из статьи
Плагины автоматизации (например, WP All Import) Простота настройки, визуальный интерфейс Может быть тяжеловесным, ограничения по условиям удаления Плагин с настройками импорта/удаления
WP-CLI команды Быстро, удобно для разработчиков, можно запускать через cron сервера Нужен доступ к серверу, терминалу wp post delete --post_type=product --post_status=draft --before='180 days ago'
Как настроить автоматическое удаление неиспользуемых вариаций товаров в WooCommerce
27.04.2026
Как использовать WPCommunity для создания форума в WordPress
16.01.2026
Как автоматически удалять старые пункты в меню WordPress по дате создания
01.03.2026
Как избежать проблем с конфликтами плагинов в WordPress
22.03.2026
Как создать настройку в личном кабинете WordPress для пользователей
10.12.2025