WooCommerce: как автоматически удалять неиспользуемые вариации товаров через код

Диагностика проблемы с вариациями товаров в WooCommerce

При работе с WooCommerce магазинами часто накапливаются неиспользуемые вариации товаров — например, после изменений атрибутов или удаления родительских товаров. Это приводит к разрастанию базы данных и замедлению работы сайта. Чтобы обнаружить такие вариации, нужно проверить, есть ли в базе вариации, которые не связаны с активными товарами или имеют статус "черновик".

SELECT p.ID, p.post_status FROM wp_posts p
WHERE p.post_type = 'product_variation'
AND (p.post_parent NOT IN (SELECT ID FROM wp_posts WHERE post_type='product' AND post_status='publish')
OR p.post_status != 'publish');

Этот запрос покажет вариации, которые либо принадлежат неактивным товарам, либо сами не опубликованы. Если таких много — они реально мешают.

Пошаговое решение: автоматическое удаление неиспользуемых вариаций

Реализуем удаление через WP-CLI или хук, чтобы запускать задачу регулярно без плагинов.

Шаг 1. Подключение функции удаления

function wc_remove_unused_variations() {
    global $wpdb;

    // Получаем ID вариаций без активных родителей
    $variations = $wpdb->get_col(
        "SELECT p.ID FROM {$wpdb->posts} p
        LEFT JOIN {$wpdb->posts} parent ON p.post_parent = parent.ID
        WHERE p.post_type = 'product_variation'
        AND (parent.post_status != 'publish' OR parent.ID IS NULL)"
    );

    if (empty($variations)) {
        return 0; // Нет вариаций для удаления
    }

    foreach ($variations as $variation_id) {
        wp_delete_post($variation_id, true);
    }

    return count($variations);
}

Шаг 2. Запуск функции по крону

Добавим задачу в WP-Cron, чтобы очистка происходила раз в сутки.

add_action('wc_daily_variation_cleanup', 'wc_remove_unused_variations');

if (!wp_next_scheduled('wc_daily_variation_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wc_daily_variation_cleanup');
}

Шаг 3. Ручной запуск для проверки

Чтобы проверить работу, вызовите функцию вручную в консоли WP-CLI:

wp eval 'echo wc_remove_unused_variations();'

Выводит количество удаленных вариаций.

Проверка результата после внедрения

  • Повторите SQL-запрос из раздела диагностики — неиспользуемые вариации должны отсутствовать.
  • Проверьте раздел «Все товары» в админке WooCommerce — вариации неактивных или удаленных товаров не должны отображаться.
  • Запустите WP-CLI команду повторно — если возвращает 0, значит очистка отработала корректно.

Частые ошибки и как их исправить

  • Удаляются нужные вариации: чаще всего из-за неправильного статуса родительского товара. Проверьте, что статусы товаров корректные и не переключайте статус товара на "черновик" без необходимости.
  • Функция ничего не удаляет: возможно, вариации не относятся к неактивным товарам, или база не обновлена. Запустите повторный SQL-запрос для проверки.
  • Проблемы с WP-Cron: WP-Cron срабатывает только при посещении сайта. Для надежности можно настроить системный cron на вызов wp-cron.php.

Практические советы по безопасности и производительности

  • Удаление производится через wp_delete_post($id, true) — это гарантирует полное удаление из базы и очистку связанных метаданных.
  • Не запускайте удаление на больших базах в пиковое время, чтобы избежать нагрузки.
  • Резервируйте базу данных перед внедрением — особенно если используете код впервые.
  • Для ускорения запросов убедитесь, что в таблице wp_posts есть индексы по post_parent и post_status.
  • Для мониторинга добавьте логирование удаления в файл или в системный лог.

Сравнение подходов: плагин vs собственный код

МетодПлюсыМинусы
Плагин (например, WP Sweep, или специализированный WooCommerce Cleaner) Простота использования, интерфейс, регулярные обновления Может добавлять лишнюю нагрузку, не всегда гибок под задачи, сторонний код
Собственный код (как в статье) Максимальный контроль, минимальная нагрузка, легко интегрируется в задачи сайта Требует навыков, ответственность за поддержку и тестирование на стороне разработчика
Удаление неиспользуемых вариаций товаров WooCommerce через код
05.06.2026
Как отключить автоматическое обновление плагинов WordPress и управлять версиями
23.12.2025
Оптимизация базы данных WordPress: эффективные методы и примеры кода
30.11.2025
Как использовать хуки в WordPress для оптимизации кода
09.11.2025
Как сделать оптимальный импорт Excel в WordPress без замедлений
27.02.2026