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

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

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

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

1. Определяем порог минимального запаса

Для начала решите, какой запас считать минимальным. Например, 1 или 0.

2. Создаем функцию для удаления товаров с запасом ниже порога

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

function wpelement_delete_low_stock_products() {
    $threshold = 1; // Порог минимального запаса

    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'meta_query' => [
            [
                'key' => '_stock',
                'value' => $threshold,
                'compare' => '<',
                'type' => 'NUMERIC'
            ]
        ],
        'fields' => 'ids',
        'post_status' => 'publish',
    ];

    $query = new WP_Query($args);

    if ($query->have_posts()) {
        foreach ($query->posts as $product_id) {
            wp_trash_post($product_id); // Отправляем товар в корзину
            // Если нужно удалить навсегда, использовать wp_delete_post($product_id, true);
        }
    }

    wp_reset_postdata();
}

3. Запускаем функцию по расписанию (WP-Cron)

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

// Регистрируем событие при активации темы или плагина
function wpelement_schedule_low_stock_cleanup() {
    if (!wp_next_scheduled('wpelement_daily_low_stock_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wpelement_daily_low_stock_cleanup');
    }
}
add_action('wp', 'wpelement_schedule_low_stock_cleanup');

// Хук для выполнения очистки
add_action('wpelement_daily_low_stock_cleanup', 'wpelement_delete_low_stock_products');

// Очистка расписания при деактивации
function wpelement_clear_low_stock_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wpelement_daily_low_stock_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpelement_daily_low_stock_cleanup');
    }
}
// Добавьте вызов этой функции при деактивации плагина или темы

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

  • Перейдите в админку WooCommerce → Товары и проверьте наличие товаров с запасом ниже порога.
  • Запустите функцию вручную (через wp shell или временно вызвав функцию) и убедитесь, что товары переносятся в корзину.
  • Проверьте логи сервера на наличие ошибок при выполнении WP-Cron.

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

  • Товары не удаляются: Проверьте, включен ли WP-Cron, и работает ли расписание. Для диагностики можно использовать плагин WP Crontrol.
  • Функция не находит товары: Убедитесь, что мета-поле _stock существует и содержит числовые значения. Если используется управление запасами плагином, проверьте, совпадают ли ключи мета-полей.
  • Удаление товаров происходит слишком часто или никогда: Проверьте правильность регистрации и отмены расписания, а также временные зоны сервера.

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

  • Перед удалением товаров лучше отправлять их в корзину с помощью wp_trash_post(), чтобы избежать потери данных.
  • Если товаров много, разбивайте обработку на порции, чтобы избежать таймаутов. Например, обрабатывать по 50 товаров за раз с помощью параметра posts_per_page.
  • Добавьте логирование удалений для аудита, записывая ID удаленных товаров в отдельный лог-файл.
  • Используйте плагин Clearfy Pro для оптимизации WooCommerce и управления фоновой очисткой сайта (https://wpshop.ru/plugins/clearfy?source=wpelement.ru&medium=article&campaign=woocommerce-udaleniye-tovarov-po-nizkomu-zapasu).

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

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