Диагностика задачи: зачем и когда нужно автоматическое удаление товаров
В интернет-магазинах на WooCommerce со временем накапливается большое количество устаревших или неактуальных товаров. Это влияет на производительность сайта и усложняет управление каталогом. Особенно остро стоит вопрос с товарами, которые давно не продаются, сняты с производства или имеют статус «черновик» или «отменён». Ручное удаление таких товаров неудобно и рискованно при больших объёмах.
Автоматизация удаления по дате создания и статусу товара помогает:
- Поддерживать каталог в актуальном состоянии
- Уменьшить нагрузку на базу данных
- Облегчить администрирование магазина
Как определить товары для удаления: критерии отбора
Для автоматизации нужно чётко задать критерии выбора товаров:
- Дата создания товара: удалить товары старше определённого периода, например 6 месяцев
- Статус товара: черновики, ожидающие проверки, отменённые или личные товары
- Статус наличия: опционально — товары с нулевым запасом
Важно не удалять активные товары с продаж, чтобы не потерять данные и не навредить SEO.
Пошаговое решение: реализация автоматического удаления товаров через WP-Cron
1. Добавление пользовательской функции удаления товаров
В файл functions.php темы или в кастомный плагин добавьте следующий код:
function wpr_delete_old_woocommerce_products() {
// Параметры: товары старше 180 дней, статус 'draft' или 'pending'
$args = array(
'post_type' => 'product',
'post_status' => array('draft', 'pending'),
'date_query' => array(
array(
'column' => 'post_date',
'before' => '180 days ago',
),
),
'posts_per_page' => 50, // ограничение за раз
'fields' => 'ids',
);
$query = new WP_Query($args);
if($query->have_posts()) {
foreach($query->posts as $product_id) {
wp_delete_post($product_id, true); // жесткое удаление
}
}
}2. Регистрация WP-Cron задачи для регулярного вызова
Добавьте хук для запуска задачи, например, ежедневно:
function wpr_schedule_product_deletion() {
if (!wp_next_scheduled('wpr_daily_product_deletion')) {
wp_schedule_event(time(), 'daily', 'wpr_daily_product_deletion');
}
}
add_action('wp', 'wpr_schedule_product_deletion');
add_action('wpr_daily_product_deletion', 'wpr_delete_old_woocommerce_products');3. Удаление товаров по статусу и дате
Функция wpr_delete_old_woocommerce_products будет запускаться каждый день и удалять 50 товаров за раз, чтобы избежать перегрузки сервера.
Проверка результата после внедрения
Чтобы убедиться, что удаление работает корректно:
- Создайте тестовые товары с нужным статусом и датой старше 180 дней (можно изменить дату через phpMyAdmin или WP CLI)
- Запустите вручную функцию через
do_action('wpr_daily_product_deletion');или дождитесь ежедневного запуска - Проверьте, что товары удалены из админки WooCommerce и базы данных
- Проверьте логи ошибок и нагрузку сервера
Частые ошибки и как их исправить
- Товары не удаляются: проверьте, что WP-Cron работает (можно использовать плагин WP Crontrol), убедитесь, что статусы и даты совпадают с запросом
- Удаляются не те товары: внимательно проверьте параметры
post_statusиdate_query - Перегрузка сервера: уменьшите
posts_per_pageили увеличьте интервал запуска задачи - Потеря важных данных: всегда делайте резервные копии перед автоматическим удалением, можно добавить дополнительное условие для проверки наличия заказов с товаром
Практические советы по безопасности и производительности
- Используйте
wp_delete_post($id, true)для полного удаления, если нужно очистить базу, иначе передайтеfalseдля помещения в корзину - Добавьте логирование удалённых товаров в отдельный файл или таблицу для аудита
- Для больших магазинов лучше запускать удаление через WP CLI скрипты или внешние cron-задачи, чтобы избежать ограничений PHP
- Перед удалением проверяйте, что товар не используется в активных заказах, иначе можно нарушить целостность данных
- Используйте плагин Clearfy Pro https://wpshop.ru/plugins/clearfy?utm_source=wpreset.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-udaleniye-tovarov-po-date-i-statusu для оптимизации базы и удаления дублей, что дополнительно ускорит работу WooCommerce
Сравнение способов реализации автоматического удаления товаров
| Метод | Плюсы | Минусы |
|---|---|---|
| WP-Cron + кастомный код | Гибкость, настраиваемые критерии, бесплатно | Зависит от посещаемости сайта, возможны задержки |
| Настоящий системный cron + WP CLI | Надёжно, не зависит от посещаемости, высокая производительность | Требует SSH-доступа, настройка сложнее |
| Плагины для автоматизации | Простота внедрения, UI для настроек | Могут снижать производительность, ограниченная кастомизация |