wpgenerate.ru wordpress wpgenerate.ru

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

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

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

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

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

  • Вариации без продаж и просмотров за заданный период (например, 6 месяцев).
  • Вариации с нулевым запасом и без заказов.
  • Вариации, отключённые вручную или с пустыми атрибутами.

Проверить можно через SQL-запросы к базе данных, либо с помощью кода, который выбирает вариации с нужными параметрами.

Пример SQL для выявления вариаций без заказов и с нулевым запасом:

SELECT p.ID FROM wp_posts p 
LEFT JOIN wp_woocommerce_order_items oi ON oi.order_item_name = p.ID 
LEFT JOIN wp_postmeta pm ON pm.post_id = p.ID AND pm.meta_key = '_stock' 
WHERE p.post_type = 'product_variation' 
AND (oi.order_item_name IS NULL) 
AND (pm.meta_value = '0' OR pm.meta_value IS NULL);

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

Реализуем функцию на PHP, которую можно запускать по расписанию через WP-Cron. Она будет искать неактивные вариации и удалять их.

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

function wpg_remove_inactive_variations() {
    $days = 180; // Период без активности в днях
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $args = [
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => '_stock',
                'value'   => '0',
                'compare' => '=',
            ],
        ],
        'date_query'     => [
            'column' => 'post_modified',
            'before' => $date_threshold,
        ],
        'fields'         => 'ids',
    ];

    $variations = get_posts($args);

    foreach ($variations as $variation_id) {
        // Проверяем, были ли заказы с этой вариацией
        $orders = wc_get_orders([
            'limit'        => 1,
            'status'       => ['completed', 'processing'],
            'meta_key'     => '_variation_id',
            'meta_value'   => $variation_id,
        ]);

        if (empty($orders)) {
            wp_delete_post($variation_id, true);
        }
    }
}

// Запуск функции через WP-Cron (пример раз в сутки)
if (!wp_next_scheduled('wpg_daily_remove_variations')) {
    wp_schedule_event(time(), 'daily', 'wpg_daily_remove_variations');
}
add_action('wpg_daily_remove_variations', 'wpg_remove_inactive_variations');

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

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

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

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

  • Удаляются нужные вариации. Проверьте логику фильтрации в get_posts, возможно, стоит добавить дополнительные условия.
  • Функция не запускается по расписанию. Убедитесь, что WP-Cron работает, и на сайте есть трафик для запуска задач.
  • Проблемы с правами доступа. Запускать код нужно с правами администратора, а wp_delete_post требует корректных прав.
  • Проверка заказов не работает. Стандартный WooCommerce не хранит связь вариации с заказом через мета-ключ '_variation_id', возможно, потребуется кастомный SQL-запрос.

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

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

Сравнительная таблица вариантов удаления неактивных вариаций

Способ Плюсы Минусы Подходит для
Плагин очистки WooCommerce Простота, интерфейс Может быть тяжеловесным, не гибким Малые и средние магазины
Кастомный код с WP-Cron (описано выше) Гибкость, автоматизация, минимальные зависимости Требует отладки, знания PHP и WP API Разработчики, крупные магазины
Ручное удаление через админку Контроль каждого варианта Очень трудоёмко, риск ошибки Малый ассортимент
×

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

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

пишет статьи

готовит SEO

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

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