Что такое неактивные вариации и зачем их удалять?
В WooCommerce вариации товаров — это отдельные записи, связанные с основным товаром. Иногда на сайте накапливается много вариаций, которые не продаются, не отображаются в каталоге или не используются. Это увеличивает размер базы данных и замедляет работу сайта. Автоматическое удаление таких вариаций помогает поддерживать чистоту данных и улучшить производительность.
Как диагностировать наличие неактивных вариаций?
Для начала нужно понять, какие вариации считать неактивными. Обычно это вариации, которые:
- не опубликованы (статус не "publish"),
- не имеют продаж за определённый период,
- не отображаются в каталоге (например, скрыты или черновики),
- не связаны с активными товарами.
Диагностика выполняется через SQL-запрос или WP-CLI. Пример запроса для поиска неопубликованных вариаций:
SELECT ID, post_parent, post_status FROM wp_posts WHERE post_type = 'product_variation' AND post_status != 'publish';Ещё можно проверить продажи вариаций через таблицы WooCommerce заказов, но это сложнее и требует отдельного запроса.
Пошаговое решение: автоматическое удаление неактивных вариаций
Для удаления вариаций без плагинов используем WP-CLI и PHP-код с хуком cron.
1. Скрипт удаления неактивных вариаций
function delete_inactive_variations() {
$args = [
'post_type' => 'product_variation',
'post_status' => ['draft', 'pending', 'private'],
'posts_per_page' => -1,
'fields' => 'ids'
];
$query = new WP_Query($args);
if ($query->have_posts()) {
foreach ($query->posts as $variation_id) {
wp_delete_post($variation_id, true);
}
}
}
// Добавим в wp-cron для еженедельного запуска
add_action('wp_scheduled_delete_inactive_variations', 'delete_inactive_variations');
if (!wp_next_scheduled('wp_scheduled_delete_inactive_variations')) {
wp_schedule_event(time(), 'weekly', 'wp_scheduled_delete_inactive_variations');
}Этот код удалит все вариации со статусом, отличным от «publish».
2. Дополнительная фильтрация по дате создания и продажам
Для более сложных условий (например, без продаж за 3 месяца) нужно расширить логику, например, используя метаданные заказов.
Проверка результата после внедрения
- Через админку WooCommerce откройте товар с вариациями — проверьте, что неактивные вариации исчезли.
- Запустите SQL-запрос из раздела диагностики повторно — неактивных вариаций быть не должно.
- Проверьте логи cron (например, с помощью плагина WP Crontrol) — задача должна запускаться еженедельно.
Частые ошибки и как их исправить
- Вариации не удаляются: проверьте, что cron-задача зарегистрирована и запускается. Можно вызвать функцию вручную через WP-CLI.
- Удаляются активные вариации: будьте внимательны с параметрами запроса. Проверьте, что в
post_statusуказаны только неактивные статусы. - Ошибка нехватки ресурсов при удалении: если вариаций много, делайте удаление пакетами с пагинацией.
Практические советы по безопасности и производительности
- Перед удалением сделайте резервную копию базы данных, чтобы можно было восстановить данные.
- Используйте
wp_delete_post($variation_id, true)с флагомtrueдля полного удаления без помещения в корзину. - Для больших магазинов используйте пакетное удаление и ставьте задачу на время низкой нагрузки.
- Не удаляйте вариации, если они связаны с активными заказами — это может привести к ошибкам на сайте.
Сравнение способов удаления неактивных вариаций
| Метод | Плюсы | Минусы | Компромисс |
|---|---|---|---|
| WP-CLI | Быстро, без нагрузки на сайт | Требует доступа к серверу | Использовать для разовых операций |
| PHP-код с cron | Автоматизация, работает без вмешательства | Может нагружать сайт при большом объёме | Удалять пакетами, настроить время запуска |
| Плагины (Clearfy и др.) | Удобный интерфейс, дополнительные функции | Может замедлять сайт, платные версии | Использовать для комплексной оптимизации |