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

Что такое неактивные вариации товаров и почему их нужно удалять

В WooCommerce вариации товаров — это отдельные дочерние записи (post type product_variation), которые могут накапливаться и замедлять работу сайта, если не используются или устарели. Например, вариации с нулевым остатком, без продаж или неактивные по статусу (черновики, скрытые) занимают место в базе и влияют на скорость запросов.

Удаление таких вариаций помогает оптимизировать базу данных, ускорить загрузку страниц каталога и упростить управление товарами.

Диагностика: как определить неактивные вариации

Для начала нужно четко определить критерии неактивности вариаций. Обычно это:

  • Вариации без продаж (meta total_sales = 0)
  • Вариации без остатка (stock_quantity = 0 или stock_status = 'outofstock')
  • Вариации в статусе «черновик» или «отменено» (post_status != 'publish')
  • Вариации, которые не отображаются на сайте (meta-флаги скрытия)

Для проверки можно выполнить SQL-запрос, который покажет вариации по этим критериям:

SELECT p.ID, p.post_status, pm1.meta_value AS stock_quantity, pm2.meta_value AS total_sales FROM wp_posts p LEFT JOIN wp_postmeta pm1 ON (p.ID = pm1.post_id AND pm1.meta_key = '_stock') LEFT JOIN wp_postmeta pm2 ON (p.ID = pm2.post_id AND pm2.meta_key = 'total_sales') WHERE p.post_type = 'product_variation' AND (p.post_status != 'publish' OR pm2.meta_value = '0' OR pm1.meta_value = '0' OR pm1.meta_value IS NULL);

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

Ниже пример кода, который можно добавить в плагин или в functions.php темы. Он удалит вариации по указанным критериям.

function wpcore_delete_inactive_variations() {
    $args = [
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'post_status'    => ['publish', 'draft', 'pending', 'private'],
        'meta_query'     => [
            'relation' => 'OR',
            [
                'key'     => 'total_sales',
                'value'   => '0',
                'compare' => '=',
                'type'    => 'NUMERIC',
            ],
            [
                'key'     => '_stock',
                'value'   => '0',
                'compare' => '=',
                'type'    => 'NUMERIC',
            ],
        ],
    ];

    $variations = get_posts($args);
    foreach ($variations as $variation) {
        if ($variation->post_status !== 'publish' || get_post_meta($variation->ID, 'total_sales', true) === '0' || get_post_meta($variation->ID, '_stock', true) === '0') {
            wp_delete_post($variation->ID, true); // без возможности восстановления
        }
    }
}
// Запускать вручную или через крон:
// wpcore_delete_inactive_variations();

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

Чтобы убедиться, что скрипт сработал:

  • Зайдите в админку WooCommerce → Товары и проверьте количество вариаций выбранных товаров.
  • Выполните SQL-запрос из раздела диагностики и убедитесь, что неактивные вариации удалены.
  • Проверьте, что на фронтенде не отображаются товары с удалёнными вариациями.

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

  • Удаление нужных вариаций: Неправильно сформированные условия могут удалить активные вариации. Всегда делайте бэкап перед запуском.
  • Проблемы с правами: Если скрипт не удаляет вариации, проверьте, что функция wp_delete_post вызывается с правами администратора.
  • Потеря данных: Использование wp_delete_post($id, true) удаляет записи без возможности восстановления. Если нужна возможность восстановления, используйте false во втором параметре.

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

  • Запускайте скрипт удаления через WP-Cron, чтобы не перегружать сервер и распределить нагрузку.
  • Добавьте логирование удалённых ID вариаций для аудита.
  • Перед удалением сделайте экспорт данных вариаций (например, через плагин WP All Export).
  • Оптимизируйте таблицу wp_postmeta после удаления с помощью OPTIMIZE TABLE wp_postmeta;
  • Рассмотрите регулярное удаление старых вариаций как часть технического обслуживания WooCommerce.

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

ПодходПреимуществаНедостаткиКомпромисс
Плагин очистки WooCommerce Простота использования, интерфейс, поддержка Может быть тяжёлым, лишний код, платные функции Использовать только проверенные плагины с хорошими отзывами
Кастомный скрипт (как в статье) Полный контроль, легковесность, адаптация под задачу Требует навыков, возможные ошибки без тестов Тестировать на тестовом сайте, делать бэкапы
Автоматическое удаление старых записей по метаданным в WordPress с помощью WPcore
28.12.2025
Автоматический импорт данных из YML в WordPress: практическое руководство
27.01.2026
WooCommerce: оптимальные настройки для очистки базы от старого кода и данных
28.05.2026
Оптимизация загрузки постов в блоке с помощью AJAX в WordPress
15.12.2025
Как добавить многоуровневое меню в WordPress с помощью кода
13.03.2026