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

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

В интернет-магазинах на WooCommerce часто накапливаются тысячи вариантов товаров, многие из которых не продаются и занимают место в базе данных. Это негативно влияет на производительность сайта, усложняет администрирование и ухудшает качество каталога. Автоматическое удаление таких вариантов — эффективный способ оптимизации.

Как определить варианты без продаж

Варианты без продаж — это вариации товаров, у которых не было связанных заказов. WooCommerce хранит данные о продажах в таблицах wp_woocommerce_order_items и wp_woocommerce_order_itemmeta. Чтобы определить, есть ли продажи у варианта, нужно проверить, встречается ли ID варианта (product_variation ID) в заказах.

Пошаговое решение: удаление вариантов без продаж с помощью кода

Реализуем функцию, которая:

  • Получит все вариации товаров.
  • Проверит для каждой вариации, есть ли связанные продажи.
  • Удалит вариацию, если продаж не было.

Добавьте следующий код в файл functions.php вашей темы или в плагин для кастомных функций:

function wc_delete_variations_without_sales() {
    global $wpdb;

    // Получаем все ID вариаций товаров
    $variation_ids = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product_variation'");
    
    foreach ($variation_ids as $variation_id) {
        // Проверяем, есть ли продажи для варианта
        $sales_count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(oi.order_item_id) FROM {$wpdb->prefix}woocommerce_order_items oi
             INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim ON oi.order_item_id = oim.order_item_id
             WHERE oi.order_item_type = 'line_item' 
             AND oim.meta_key = '_variation_id' 
             AND oim.meta_value = %d",
            $variation_id
        ));

        if (intval($sales_count) === 0) {
            // Удаляем вариацию без продаж
            wp_delete_post($variation_id, true); // true — безвозвратно
        }
    }
}

// Запуск функции вручную или через WP-Cron
// wc_delete_variations_without_sales();

Для регулярного запуска можно добавить WP-Cron задачу:

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

add_action( 'wc_delete_variations_without_sales_cron', 'wc_delete_variations_without_sales' );

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

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

  • Проверьте количество вариаций товаров до и после запуска кода.
  • В админке WooCommerce перейдите в раздел «Товары» - «Вариации» и убедитесь, что неиспользуемые варианты исчезли.
  • Проверьте логи ошибок PHP на наличие предупреждений или ошибок.

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

  • Удаляются активные варианты с продажами: Проверьте SQL-запрос, возможно, ошибка в условии. Для диагностики добавьте логирование $sales_count.
  • Вариации не удаляются: Проверьте права пользователя, под которым выполняется скрипт, а также статус публикации вариаций. Используйте wp_delete_post($variation_id, true); для безвозвратного удаления.
  • Падение сайта из-за большого количества вариаций: Запускайте удаление партиями, разделяя операции на несколько вызовов с лимитом в 50-100 вариантов.

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

  • Резервное копирование: Перед массовым удалением обязательно создайте резервную копию базы данных.
  • Запуск в периоды низкой нагрузки: Чтобы не перегружать сервер, запускайте функцию ночью или по расписанию с WP-Cron.
  • Пакетная обработка: Для магазинов с тысячами вариаций разбивайте удаление на части, чтобы избежать таймаутов.
  • Логирование: Добавьте ведение логов удаленных вариантов для аудита.

Сравнение способов удаления вариантов без продаж

СпособПреимуществаНедостаткиКомпромисс
Плагин очистки WooCommerceПростота использования, GUIМожет быть дорогостоящим, ограниченная кастомизацияПодходит для небольших магазинов
Кастомный код с WP-CronПолный контроль, бесплатный, автоматизацияТребует знаний, возможность ошибок без тестированияЛучшее для опытных разработчиков
Ручное удаление через админкуПростота, не требует кодаТрудозатратно при большом объемеИспользовать для единичных случаев

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать автоматическую очистку базы данных WordPress от устаревших данных
05.04.2026
Как создать настройку для внешнего API в WordPress: подробное руководство
10.01.2026
Как создать автоматическое сохранение через AJAX в WordPress
02.12.2025
Как создать настраиваемый фильтр товаров в WordPress с примерами кода
22.11.2025
Как создать автоматические редиректы в WordPress для исправления ошибок 404
13.01.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше