Диагностика проблемы с незавершёнными вариантами товаров в WooCommerce
Незавершённые варианты товаров (variation drafts) создаются автоматически при работе с вариативными товарами в WooCommerce, особенно при массовом импорте или редактировании. Это приводит к засорению базы и может ухудшать производительность сайта, а также вызывать путаницу в каталоге.
Чтобы убедиться, что у вас есть проблема с такими вариантами, выполните следующий запрос к базе данных через phpMyAdmin или WP-CLI:
SELECT ID, post_title, post_status FROM wp_posts
WHERE post_type = 'product_variation' AND post_status = 'draft';
Если количество результатов слишком большое (сотни и выше), стоит очистить эти варианты и предотвратить их автоматическое создание.
Шаги по отключению автоматического создания незавершённых вариантов
1. Отключение автосохранения вариаций в редакторе
WooCommerce создаёт новые варианты в статусе "draft" при добавлении атрибутов и сохранении товара. Чтобы этого избежать, используйте фильтр 'woocommerce_save_product_variation_post_status' в functions.php вашей темы или в плагине для кастомных функций:
add_filter('woocommerce_save_product_variation_post_status', function($status, $variation_id, $product_id) {
// Отключаем создание draft-статуса, устанавливаем 'private' или 'publish'
return 'private';
}, 10, 3);
Это изменит статус новых вариантов с draft на private, тем самым не создавая видимых незавершённых вариантов.
2. Очистка уже созданных незавершённых вариантов
Для удаления существующих вариантов со статусом draft используйте следующий код в плагине или через WP-CLI скрипт:
$args = [
'post_type' => 'product_variation',
'post_status' => 'draft',
'posts_per_page' => -1,
'fields' => 'ids'
];
$draft_variations = get_posts($args);
foreach ($draft_variations as $var_id) {
wp_delete_post($var_id, true); // принудительное удаление
}
Выполните это после бэкапа базы данных.
Проверка результата после внедрения
- Повторите SQL-запрос из блока диагностики — количество
draftвариантов должно быть 0. - Создайте новый вариативный товар с несколькими атрибутами и сохраните — проверьте, что новые варианты не создаются в статусе
draft. - Обратите внимание: варианты должны иметь статус
privateилиpublish, чтобы они не засоряли админку.
Частые ошибки и как их исправить
- Варианты продолжают создаваться в статусе draft: Убедитесь, что код с фильтром подключён и нет конфликтующих плагинов, переопределяющих статус вариаций.
- Удаление вариантов не происходит: Проверьте права пользователя, под которым выполняется код удаления, а также отсутствие ограничений на удаление в базе.
- Ошибки в редакторе товаров после изменения статуса: Если варианты становятся невидимыми, убедитесь, что WooCommerce не зависит от статуса draft для корректной работы — лучше использовать
private.
Практические советы по безопасности и производительности
- Перед массовым удалением делайте резервную копию базы данных.
- Используйте WP-CLI или отдельные скрипты для обработки большого количества записей, чтобы избежать таймаутов.
- Ограничьте права редакторов и менеджеров, чтобы предотвратить случайное создание большого числа вариантов.
- Регулярно проверяйте базу на наличие «мусорных» записей с помощью SQL-запросов.
Сравнение методов удаления незавершённых вариантов
| Метод | Плюсы | Минусы | Компромисс |
|---|---|---|---|
| SQL-запрос напрямую | Быстро и эффективно | Риск повредить базу без опыта | Требует осторожности и бэкапа |
| PHP-скрипт с wp_delete_post() | Безопаснее, учитывает хуки | Медленнее при большом количестве | Использовать в пакетах с лимитами |
| Плагины очистки WooCommerce | Удобство интерфейса | Могут не иметь нужного функционала | Подходит для регулярной чистки |