Диагностика проблемы: зачем удалять неактивные вариации товаров
В интернет-магазинах на WooCommerce с большим ассортиментом часто накапливаются вариации товаров, которые больше не используются — устаревшие цвета, размеры, снятые с производства модели. Они занимают место в базе данных, замедляют загрузку страниц и усложняют администрирование магазина.
Чтобы проверить, есть ли у вас неактивные вариации, выполните SQL-запрос к базе данных (через phpMyAdmin или WP CLI):
SELECT p.ID, p.post_parent, p.post_status FROM wp_posts p WHERE p.post_type = 'product_variation' AND p.post_status != 'publish';Если в результате много записей с статусом draft, trash или другими неактивными статусами, стоит рассмотреть их удаление.
Пошаговое решение: удаление неактивных вариаций через код
1. Создание функции для очистки вариаций
Добавьте следующий код в файл functions.php вашей дочерней темы или в отдельный кастомный плагин:
function wc_delete_inactive_variations() {
global $wpdb;
// Получаем ID вариаций со статусом, отличным от 'publish'
$inactive_variations = $wpdb->get_col(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product_variation' AND post_status != 'publish'"
);
if (empty($inactive_variations)) {
return;
}
foreach ($inactive_variations as $variation_id) {
// Удаляем вариацию полностью
wp_delete_post($variation_id, true);
}
}2. Запуск функции вручную или через Cron
Чтобы не запускать вручную, добавьте хук для ежедневного удаления:
if (!wp_next_scheduled('wc_daily_delete_inactive_variations')) {
wp_schedule_event(time(), 'daily', 'wc_daily_delete_inactive_variations');
}
add_action('wc_daily_delete_inactive_variations', 'wc_delete_inactive_variations');Для однократного запуска вызовите wc_delete_inactive_variations(); в functions.php и удалите после теста.
Проверка результата после внедрения
После запуска функции проверьте, что вариации удалены:
- Повторите SQL-запрос из раздела диагностики — результат должен быть пустым или содержать только активные вариации.
- В админке WooCommerce в списке вариаций у товара не должно быть неактивных записей.
- Проверьте логи ошибок сервера и WordPress на предмет возможных сбоев.
Частые ошибки и как их исправить
- Вариации не удаляются: проверьте права пользователя, от которого запускается код (должен иметь права на удаление записей). Также убедитесь, что
wp_delete_postне блокируется плагинами безопасности. - Функция запускается слишком часто, нагрузка на сервер: используйте wp_cron с интервалом не чаще раза в сутки. Для больших магазинов можно увеличить интервал или запускать вручную.
- Удаляются нужные вариации: уточните критерии отбора, например, не просто статус, а также дату последнего обновления или наличие заказов с этой вариацией.
Практические советы по безопасности и производительности
- Перед удалением делайте резервную копию базы данных — это позволит восстановить данные в случае ошибки.
- Используйте транзакции в SQL, если планируется массовое удаление, чтобы избежать частичного удаления при сбое.
- Логируйте ID удаляемых вариаций в отдельный файл для аудита.
- Оптимизируйте базу данных после удаления с помощью WP-CLI или плагинов типа Clearfy Pro (https://wpshop.ru/plugins/clearfy).
Таблица сравнения способов удаления неактивных вариаций
| Метод | Плюсы | Минусы | Подходит для |
|---|---|---|---|
| Ручное удаление через админку WooCommerce | Простота, контроль | Долго при большом количестве вариаций | Малые магазины |
| Код в functions.php + Cron | Автоматизация, масштабируемость | Требуется тестирование, возможно удаление нужных вариаций | Средние и крупные магазины |
| Плагины очистки базы | Удобный интерфейс, дополнительные функции | Зависимость от стороннего кода, возможные конфликты | Все уровни, при наличии бюджета |