Управление каталогом товаров в WooCommerce часто требует не только добавления новых продуктов, но и своевременного удаления устаревших или неактивных позиций. Особенно актуальна задача автоматического удаления товаров, которые не продавались длительное время или устарели по другим параметрам. В этой статье разберём, как реализовать автоматическое удаление старых продуктов в WooCommerce с помощью пользовательского кода и плагинов.
Почему важно удалять старые товары в WooCommerce
Удаление старых товаров помогает поддерживать актуальность каталога, улучшает скорость работы сайта и навигацию для пользователей. Кроме того, уменьшение количества неактуальных товаров снижает нагрузку на базу данных и ускоряет индексацию сайта поисковиками.
Однако ручное удаление товаров — трудоёмкий процесс, особенно при большом ассортименте. Автоматизация этой задачи позволяет экономить время и исключить человеческий фактор.
Критерии для удаления старых товаров
Для автоматического удаления можно использовать разные критерии:
- Отсутствие продаж за последний год или другой период
- Дата последнего обновления товара (например, старше 2 лет)
- Статус товара — черновик, снят с публикации и т.п.
- Отсутствие изображений или описания
В зависимости от задачи можно комбинировать эти параметры.
Реализация автоматического удаления товаров через WP Cron
Для автоматизации удаления используем планировщик задач WordPress (WP Cron). Ниже пример функции, которая удаляет продукты WooCommerce, не продававшиеся более 365 дней.
function wponline_delete_old_woocommerce_products() {
global $wpdb;
// Получаем дату год назад
$date_threshold = date('Y-m-d H:i:s', strtotime('-365 days'));
// Запрос товаров, у которых нет заказов после $date_threshold
$product_ids = $wpdb->get_col(
$wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} p
WHERE p.post_type = 'product'
AND p.post_status = 'publish'
AND NOT EXISTS (
SELECT 1 FROM {$wpdb->prefix}woocommerce_order_items oi
JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim ON oi.order_item_id = oim.order_item_id
JOIN {$wpdb->posts} o ON o.ID = oi.order_id
WHERE o.post_type = 'shop_order'
AND o.post_status IN ('wc-completed','wc-processing')
AND o.post_date > %s
AND oim.meta_key = '_product_id'
AND oim.meta_value = p.ID
)",
$date_threshold
)
);
if (!empty($product_ids)) {
foreach ($product_ids as $product_id) {
// Удаляем продукт без возможности восстановления
wp_delete_post($product_id, true);
}
}
}
// Планируем задачу, если она не запланирована
if (!wp_next_scheduled('wponline_cron_delete_old_products')) {
wp_schedule_event(time(), 'daily', 'wponline_cron_delete_old_products');
}
// Хук для запуска функции
add_action('wponline_cron_delete_old_products', 'wponline_delete_old_woocommerce_products');
Этот код можно добавить в файл functions.php вашей темы или создать отдельный плагин.
Объяснение кода и доработка
Функция wponline_delete_old_woocommerce_products ищет товары, у которых не было заказов с датой позже года назад. Для этого используется прямой запрос к базе данных, объединяющий таблицы заказов и заказанных товаров WooCommerce.
После получения списка ID товаров, подходящих под условие, они удаляются функцией wp_delete_post с параметром true, чтобы пропустить корзину удалённых.
Планировщик WP Cron запускает эту функцию каждый день, что позволяет регулярно очищать каталог от устаревших товаров.
При необходимости можно изменить критерии, например, удалить товары по дате последнего обновления или по статусу.
Использование плагинов для автоматизации удаления товаров
Если вы предпочитаете готовые решения, обратите внимание на плагины:
- Woo Product Delete Scheduler — позволяет планировать автоматическое удаление товаров по дате публикации.
- Clearfy Pro — комплексный плагин для оптимизации WooCommerce и WordPress, в том числе с инструментами для очистки и управления товарами.
Использование плагинов удобно, если вы не хотите писать код или нужны дополнительные функции с интерфейсом.
Пример настройки Clearfy Pro для удаления старых товаров
В Clearfy Pro есть модуль для очистки базы данных и управления товарами. Можно настроить автоматическую очистку товаров без продаж или по дате создания.
Для этого после установки и активации плагина перейдите в «Clearfy → WooCommerce → Очистка товаров» и задайте нужные параметры — период без продаж, статус товаров и время запуска очистки.
Дополнительные советы по безопасности и бэкапам
Перед автоматическим удалением товаров обязательно делайте резервные копии сайта и базы данных. Это позволит восстановить данные в случае ошибки или некорректного удаления.
Также рекомендуем сначала запускать функцию удаления в тестовом режиме — например, удалять товары в статус «корзина» или просто выводить список на удаление без фактического удаления.
Так вы убедитесь, что алгоритм работает корректно и не удалит нужные товары.
Итог
Автоматическое удаление старых товаров в WooCommerce — важный инструмент для поддержания актуального и быстрого интернет-магазина. С помощью WP Cron и кастомного кода или готовых плагинов можно легко настроить регулярную очистку каталога от неактуальных товаров.
Используйте приведённый пример, адаптируйте его под свои задачи и обязательно соблюдайте меры безопасности. А если нужны дополнительные возможности оптимизации WooCommerce, обратите внимание на Clearfy Pro.