Диагностика проблемы: зачем и когда удалять неактивные товары
В WooCommerce с течением времени накапливаются товары, которые давно не продаются и не обновлялись. Они могут быть сняты с продажи, находиться в статусе «черновик» или «ожидают проверки». Наличие большого числа таких товаров замедляет работу магазина, утяжеляет базу данных и ухудшает пользовательский опыт.
Для диагностики можно использовать SQL-запросы или плагины, показывающие статистику товаров по статусам и дате последнего обновления. Например, запрос для подсчёта товаров без активности за последние 6 месяцев:
SELECT COUNT(*) FROM wp_posts
WHERE post_type = 'product'
AND post_status IN ('publish', 'draft', 'pending')
AND post_modified < NOW() - INTERVAL 6 MONTH;
Если число слишком большое — пора очищать каталог.
Пошаговое решение: автоматизация удаления неактивных товаров через код
1. Определяем критерии неактивности
В качестве критерия возьмём товары, которые не обновлялись более 6 месяцев и имеют статус «draft» или «pending». Статус «publish» не трогаем, чтобы не удалить товары в продаже.
2. Создаём функцию для удаления
Добавьте следующий код в functions.php дочерней темы или в собственный плагин:
function wpnews_delete_inactive_products() {
$args = array(
'post_type' => 'product',
'post_status' => array('draft', 'pending'),
'date_query' => array(
array(
'column' => 'post_modified',
'before' => '6 months ago',
),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$products = get_posts($args);
if(empty($products)) {
return;
}
foreach($products as $product_id) {
wp_delete_post($product_id, true); // true - удаление навсегда
}
}
3. Автоматизация через WP-Cron
Чтобы запускать очистку регулярно, добавим событие в WP-Cron:
function wpnews_schedule_product_cleanup() {
if(!wp_next_scheduled('wpnews_cleanup_inactive_products_hook')) {
wp_schedule_event(time(), 'daily', 'wpnews_cleanup_inactive_products_hook');
}
}
add_action('wp', 'wpnews_schedule_product_cleanup');
add_action('wpnews_cleanup_inactive_products_hook', 'wpnews_delete_inactive_products');
Теперь функция удаления будет запускаться ежедневно.
Проверка результата после внедрения
- Перейдите в админку WooCommerce → Товары и отфильтруйте по статусам «Черновик» и «Ожидает проверки».
- Проверьте дату последнего изменения товаров — они должны быть удалены, если старше 6 месяцев.
- Для мгновенного теста можно вызвать функцию вручную через
wp shellили добавить временный вызов в код. - Проверьте логи ошибок — в случае проблем удаление не должно вызывать фатальных ошибок.
Частые ошибки и способы их исправления
- Функция не запускается по расписанию: Проверьте, что WP-Cron работает. Стандартный WP-Cron запускается при посещении сайта, если трафика мало — добавьте системный cron-задание на вызов
wp-cron.php. - Удаляются нужные товары: Убедитесь, что фильтр по статусам и дате корректен. Рекомендуется тестировать на стейджинг-сайте.
- Проблемы с производительностью при большом числе товаров: Используйте постраничный удаление, например,
posts_per_page => 50, и удаляйте партиями с паузами. - Нет уведомления об удалении: Добавьте логирование через
error_log()или запись в отдельный файл для контроля.
Практические советы по безопасности и производительности
- Удаление товаров навсегда (
wp_delete_post($id, true)) нельзя отменить. Делайте резервные копии базы перед запуском. - Для снижения нагрузки разделяйте удаление на пакеты и выполняйте с задержками через WP-Cron.
- Проверяйте права пользователя, если планируете запускать удаление через интерфейс.
- Если магазин большой, рассмотрите использование WP-CLI для удаления — это эффективнее и надёжнее.
- Для дополнительной очистки можно вместе с товарами удалять связанные медиа и метаданные.
Сравнение способов автоматического удаления неактивных товаров
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Ручное удаление в админке | Удаление товаров вручную через фильтр | Простота, контроль | Трудозатратно, не автоматично |
| Код с WP-Cron | Автоматическое удаление старых товаров по расписанию | Автоматизация, гибкость настройки | Зависит от работы WP-Cron, требует тестирования |
| Плагины очистки | Готовые решения для управления товарами | Простота установки, дополнительные функции | Могут влиять на производительность, лицензии |