wphow.ru wordpress WPHow

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

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

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

  • Вариации с нулевыми продажами за длительный период;
  • Вариации без установленных цен или отсутствующие в каталоге;
  • Вариации, не отображающиеся на фронтенде;
  • Вариации с мета-данными, указывающими на деактивацию.

Для диагностики используйте SQL-запросы к базе и проверяйте таблицы wp_posts и wp_postmeta на наличие вариаций с типом поста product_variation.

Пример SQL-запроса для поиска вариаций без продаж

SELECT p.ID, p.post_title, SUM(oi.meta_value) as total_sales
FROM wp_posts p
LEFT JOIN wp_woocommerce_order_items oi ON oi.order_item_name = p.post_title
WHERE p.post_type = 'product_variation'
GROUP BY p.ID
HAVING total_sales IS NULL OR total_sales = 0;

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

Реализуем функцию, которая удалит вариации без продаж и с нулевой ценой. Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин.

function wphow_delete_unused_variations() {
    $args = [
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => '_price',
                'value'   => 0,
                'compare' => '=',
                'type'    => 'NUMERIC'
            ]
        ],
        'fields'         => 'ids'
    ];

    $variations = get_posts($args);

    foreach ($variations as $variation_id) {
        // Проверяем продажи для вариации
        $total_sales = get_post_meta($variation_id, 'total_sales', true);
        if (empty($total_sales) || intval($total_sales) === 0) {
            wp_delete_post($variation_id, true);
        }
    }
}

add_action('init', 'wphow_delete_unused_variations');

Этот код удалит вариации с ценой 0 и без продаж, что снижает нагрузку на базу. Запустите код один раз, затем удалите или закомментируйте функцию, чтобы избежать постоянного удаления.

Расширение: удаление неактивных вариаций по дате создания

Можно дополнительно добавить фильтр по дате создания, чтобы удалять вариации старше определенного периода:

$args['date_query'] = [
    [
        'column' => 'post_date',
        'before' => '6 months ago'
    ]
];

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

После запуска функции проверьте:

  • В админке WooCommerce пропали вариации с ценой 0 и без продаж;
  • Размер базы данных уменьшился (можно проверить через phpMyAdmin или плагин оптимизации);
  • Производительность страницы редактирования товаров улучшилась;
  • Ошибок и предупреждений в логах нет.

Для выборочной проверки выполните SQL-запрос из раздела диагностики до и после удаления.

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

  • Удаление нужных вариаций: Неправильный фильтр по цене или продажам может удалить активные вариации. Обязательно протестируйте на копии сайта.
  • Функция вызывается каждый раз: Если не удалить функцию после первого запуска, вариации будут удаляться постоянно. Используйте временные метки или флаг.
  • Проблемы с правами доступа: Функция должна выполняться с правами администратора или через WP-CLI.
  • Не учитываются заказы с вариациями: В WooCommerce нет готового мета-поля total_sales для вариаций, поэтому можно использовать дополнительные запросы к заказам или плагин статистики.

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

  • Перед массовым удалением сделайте резервную копию базы данных.
  • Оптимизируйте запросы, ограничивая количество обрабатываемых вариаций за один запуск (используйте пагинацию).
  • Для больших магазинов запускайте очистку через WP-CLI или крон-задачи, чтобы не блокировать веб-запросы.
  • Используйте плагины кеширования и оптимизации (например, Clearfy Pro) для снижения нагрузки после удаления вариаций.
  • Ограничьте доступ к функции удаления только администраторам сайта.

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

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

Скидки на топовые темы и плагины

Активировать суперсилу ⋙