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

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

Магазины на WooCommerce часто сталкиваются с проблемой: товары, которые закончились на складе (stock = 0), продолжают отображаться в каталоге. Это может приводить к снижению конверсии, негативному опыту пользователей и увеличению административной нагрузки на менеджеров, которым приходится вручную удалять или скрывать такие товары.

Основные причины:

  • Отсутствие настроек автоматического управления запасами.
  • Плагины кэширования не обновляют данные вовремя.
  • Отсутствие логики удаления или скрытия товаров при достижении нуля на складе.

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

1. Включение управления запасами WooCommerce

Перейдите в WooCommerce > Настройки > Товары > Запасы и убедитесь, что опция Включить управление запасами активирована. Это позволит WooCommerce отслеживать количество товара.

2. Написание функции для удаления товаров с нулевым запасом

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

function wpmeta_delete_out_of_stock_products() {
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => '_stock_status',
                'value' => 'outofstock',
            ),
        ),
        'fields' => 'ids',
    );
    $query = new WP_Query($args);

    foreach ($query->posts as $product_id) {
        wp_delete_post($product_id, true); // true - без перемещения в корзину
    }
}

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

// Хук для очистки
add_action('wpmeta_daily_stock_cleanup', 'wpmeta_delete_out_of_stock_products');

3. Ручной запуск для проверки

Для тестирования можно запустить функцию вручную, вызвав wpmeta_delete_out_of_stock_products(); через админ-панель с помощью плагина Code Snippets или WP-CLI.

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

  • В админке WooCommerce в разделе «Товары» убедитесь, что товары со статусом outofstock удалены.
  • Проверьте фронтенд сайта — таких товаров не должно отображаться в каталоге.
  • Для проверки работы WP-Cron можно использовать плагин WP Crontrol и просмотреть запланированные задачи.

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

Ошибка 1: Товары не удаляются, хотя статус «нет в наличии»

Причина: возможно, товары не имеют мета-поля _stock_status со значением outofstock. Проверьте с помощью запроса в базе или плагина «Query Monitor».

Ошибка 2: Удаляются товары, которые не должны быть удалены

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

Ошибка 3: WP-Cron не запускается автоматически

Причина: на некоторых хостингах WP-Cron работает только при посещении сайта. Для надежной работы настройте системный cron или запускайте вручную.

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

  • Перед удалением товаров делайте резервные копии базы данных.
  • Для больших магазинов используйте пагинацию в запросе, чтобы не перегружать память.
  • Если хотите не удалять, а скрывать товары, замените wp_delete_post на изменение статуса товара 'draft' или 'private'.
  • Оптимизируйте кэширование, чтобы изменения сразу отражались на сайте.

Сравнение вариантов решения задачи

МетодПлюсыМинусы
Ручное удаление в админкеПросто, без кодаТрудозатратно, ошибка человека
Автоматическое удаление через WP-Cron (код)Автоматизация, масштабируемостьНеобходимы навыки, возможны ошибки в логике
Скрытие товаров с помощью статусаБезопасно, можно быстро восстановитьТовары остаются в базе, увеличивается размер каталога
WP-Cron для автоматического очищения базы данных WordPress: практическое руководство
22.04.2026
Как сделать автоматический импорт из XML в WordPress
08.03.2026
Как автоматизировать удаление старых постов в WordPress по разным критериям
03.04.2026
Как использовать REST API для управления пользователями в WordPress
10.12.2025
Как использовать WPRemark для оптимизации комментариев в WordPress
19.02.2026

Совсем скоро здесь откроется ресурс о вордпресс.