Диагностика проблемы: зачем и когда нужно удалять товары автоматически
В интернет-магазинах на WooCommerce часто возникает задача периодически очищать каталог от устаревших или неактивных товаров. Например, товары с истекшим сроком годности, снятые с продажи или товары, которые не обновлялись долгое время. Ручное удаление таких товаров — трудоёмкий процесс, особенно при большом ассортименте.
Автоматизация удаления товаров позволяет поддерживать актуальность каталога, снижать нагрузку на базу данных и улучшать пользовательский опыт.
Пошаговое решение: как настроить автоматическое удаление товаров по дате и статусу
1. Определяем критерии удаления
В этом примере мы будем удалять товары, у которых дата последнего обновления более 180 дней назад и статус «черновик» (draft).
2. Создаём функцию удаления
Добавьте следующий код в файл functions.php вашей дочерней темы или в собственный плагин:
function wpreset_delete_old_draft_products() {
global $wpdb;
// Получаем товары типа 'product' со статусом 'draft' старше 180 дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-180 days'));
$args = array(
'post_type' => 'product',
'post_status' => 'draft',
'date_query' => array(
array(
'column' => 'post_modified',
'before' => $date_threshold,
),
),
'fields' => 'ids',
'posts_per_page' => -1,
);
$old_products = get_posts($args);
if (empty($old_products)) {
return;
}
foreach ($old_products as $product_id) {
wp_delete_post($product_id, true); // true — удалять без возможности восстановления
}
}3. Настраиваем крон-задачу для регулярного запуска
Чтобы функция запускалась автоматически, зарегистрируем событие WP-Cron, которое будет вызываться ежедневно:
if (!wp_next_scheduled('wpreset_daily_delete_old_products')) {
wp_schedule_event(time(), 'daily', 'wpreset_daily_delete_old_products');
}
add_action('wpreset_daily_delete_old_products', 'wpreset_delete_old_draft_products');4. Как запустить задачу вручную для теста
Временно вызовите функцию напрямую, например, через admin_init (не забудьте потом убрать):
add_action('admin_init', function() {
if (current_user_can('administrator') && isset($_GET['run_delete_old_products'])) {
wpreset_delete_old_draft_products();
wp_die('Удаление выполнено');
}
});После этого в админке вызовите https://ваш_сайт/wp-admin/?run_delete_old_products=1 для теста.
Проверка результата после внедрения
- В админке WooCommerce проверьте список товаров: старые товары со статусом «черновик» должны исчезнуть.
- Рекомендуется сделать бэкап базы перед тестами.
- Для логирования можно добавить запись в файл или базу, чтобы фиксировать время и количество удаленных товаров:
function wpreset_delete_old_draft_products() {
...
$deleted_count = 0;
foreach ($old_products as $product_id) {
wp_delete_post($product_id, true);
$deleted_count++;
}
error_log("[WPReset] Deleted $deleted_count old draft products on " . current_time('mysql'));
}Частые ошибки и как их исправить
- Функция не удаляет товары: проверьте, что товары действительно имеют статус
draftи дату последнего обновления старше 180 дней. - Крон-задача не запускается: убедитесь, что на сайте есть посещения (WP-Cron зависит от них) или настройте системный cron для wp-cron.php.
- Удаление происходит слишком часто или редко: проверьте интервал
dailyи время запуска; для большей точности используйте системный cron. - Удалённые товары восстанавливаются: возможно, активен плагин резервного копирования с функцией восстановления, проверьте настройки плагинов.
Практические советы по безопасности и производительности
- Всегда делайте резервную копию перед автоматическим удалением данных.
- Для больших баз товаров используйте пакетную обработку (например, удалять по 50 товаров за раз) чтобы не превышать лимит памяти или время выполнения скрипта.
- Записывайте логи удаления для аудита и отладки.
- Рассмотрите использование плагина Clearfy Pro для оптимизации и автоматизации очистки базы WooCommerce с расширенными настройками.
Сравнение вариантов реализации удаления товаров
| Метод | Плюсы | Минусы | Когда применять |
|---|---|---|---|
| Код на functions.php + WP-Cron | Полный контроль, нет зависимостей от плагинов, гибкость | Требует навыков, может не запускаться без посещений | Для разработчиков, кастомные условия удаления |
| Плагины автоматизации (например, Clearfy Pro) | Удобный интерфейс, дополнительные функции оптимизации | Зависимость от плагина, возможное замедление сайта | Для администраторов без навыков программирования |