wpdownload.ru wordpress WPDownload.ru

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

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

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

Как определить неиспользуемые варианты товаров

Неиспользуемыми считаются вариации, которые:

  • Не связаны с активным родительским товаром (продуктом-конфигурацией).
  • Отключены (статус "черновик" или "отключено").
  • Не имеют запасов на складе и не продаются.
  • Имеют дату окончания продаж в прошлом (если используется поле "Дата окончания").

Для диагностики можно использовать SQL-запросы и WP CLI или написать PHP-скрипт на базе WooCommerce API.

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

1. Создаем WP-CLI команду для поиска и удаления вариантов

if ( defined('WP_CLI') && WP_CLI ) {
    WP_CLI::add_command('wc-clean-unused-variations', function() {
        $args = [
            'post_type'   => 'product_variation',
            'post_status' => ['draft', 'private', 'trash'],
            'numberposts' => -1
        ];
        $variations = get_posts($args);
        $deleted_count = 0;
        foreach ($variations as $variation) {
            $parent_id = wp_get_post_parent_id($variation->ID);
            if (!$parent_id || get_post_status($parent_id) !== 'publish') {
                wp_delete_post($variation->ID, true);
                $deleted_count++;
                continue;
            }

            // Проверяем наличие запасов
            $stock = get_post_meta($variation->ID, '_stock', true);
            if ($stock === '0' || $stock === '') {
                wp_delete_post($variation->ID, true);
                $deleted_count++;
            }
        }
        WP_CLI::success("Удалено вариантов: $deleted_count");
    });
}

2. Как запустить команду

В терминале на сервере с WP CLI выполните:

wp wc-clean-unused-variations

Команда удалит все вариации, которые не относятся к опубликованным продуктам или имеют 0 запасов.

3. Автоматизация с помощью WP Cron

Чтобы регулярно очищать базу, добавьте в functions.php или в свой плагин следующий код:

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

add_action('wc_clean_unused_variations_event', function() {
    $args = [
        'post_type'   => 'product_variation',
        'post_status' => ['draft', 'private', 'trash'],
        'numberposts' => -1
    ];
    $variations = get_posts($args);
    foreach ($variations as $variation) {
        $parent_id = wp_get_post_parent_id($variation->ID);
        if (!$parent_id || get_post_status($parent_id) !== 'publish') {
            wp_delete_post($variation->ID, true);
            continue;
        }

        $stock = get_post_meta($variation->ID, '_stock', true);
        if ($stock === '0' || $stock === '') {
            wp_delete_post($variation->ID, true);
        }
    }
});

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

  • Через WP Admin перейдите в раздел «Товары» — «Вариации» и убедитесь, что неиспользуемые варианты исчезли.
  • Запустите SQL-запрос для проверки количества вариаций: SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product_variation';. Сравните число до и после удаления.
  • Проверьте логи сервера/хостинга на предмет ошибок при удалении.
  • Используйте WP CLI команду wp wc-clean-unused-variations --dry-run для тестового запуска (добавьте функционал dry-run при необходимости).

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

  • Удаление активных вариаций: Проверьте, что родительский товар опубликован. Иногда товары могут быть в статусе "черновик" или "отключено", и их вариации удалятся по ошибке.
  • Потеря данных запасов: Убедитесь, что мета-ключ _stock корректно установлен для всех вариаций. Если используется сторонний складской плагин, возможно, нужно адаптировать проверку.
  • Проблемы с WP Cron: Если планировщик не срабатывает, настройте системный cron или вызов wp-cron.php через cron на сервере.
  • Недостаточно прав: Команда WP CLI должна запускаться от пользователя с правами на удаление записей.

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

  • Перед массовым удалением создайте резервную копию базы данных.
  • Используйте транзакции и ограничивайте количество удаляемых вариаций за один запуск, чтобы избежать таймаутов.
  • Проверяйте совместимость с плагинами, которые управляют вариациями или запасами, чтобы не удалить нужные данные.
  • Для сайтов с большим каталогом создайте пагинацию в выборке, например, обрабатывайте по 100 вариаций за раз.

Сравнение вариантов удаления неиспользуемых вариаций

МетодОписаниеПлюсыМинусы
Ручное удаление через админкуУдаление вариаций по одной или списком вручнуюПростое, не требует кодаДолго, риск пропуска вариаций
WP CLI команда (код выше)Автоматизированное удаление через консольБыстро, можно запускать по расписаниюТребует доступа к серверу и базовые навыки CLI
Плагин очисткиИспользование сторонних плагинов для очисткиУдобно, интерфейсМожет быть несовместим, нагрузка на сайт
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙