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

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

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

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

1. Определение условия для удаления товара

Для WooCommerce количество товара хранится в мета-поле _stock. Чтобы определить, что товар отсутствует, проверяем, что _stock равно нулю и при этом _stock_status равен outofstock.

2. Создание функции для удаления товаров

Добавим код в файл functions.php темы или в отдельный плагин. Функция будет находить все такие товары и удалять их из базы.

function wc_delete_out_of_stock_products() {
    // Параметры запроса: все товары с нулевым остатком и статусом outofstock
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'meta_query' => array(
            'relation' => 'AND',
            array(
                'key' => '_stock_status',
                'value' => 'outofstock',
            ),
            array(
                'key' => '_stock',
                'value' => '0',
                'compare' => '=',
                'type' => 'NUMERIC'
            )
        ),
        'fields' => 'ids',
    );

    $products = get_posts($args);

    if(empty($products)) {
        return 'No out of stock products found.';
    }

    foreach($products as $product_id) {
        wp_delete_post($product_id, true); // true - безвозвратно
    }

    return count($products) . ' products deleted.';
}

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

Чтобы решение работало регулярно, зарегистрируем событие WP-Cron, которое будет запускать функцию раз в сутки.

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

add_action('wc_daily_outofstock_cleanup', 'wc_delete_out_of_stock_products');

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

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

  • В админке WooCommerce в списке товаров исчезли те, у которых _stock равно 0 и статус outofstock.
  • Если хотите протестировать сразу, вызовите функцию вручную, например, через add_action('admin_init', 'wc_delete_out_of_stock_products'); и обновите админку.
  • Проверьте логи ошибок PHP, если товары не удаляются.

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

  • Неверный meta_query: Если условия поиска не совпадают с реальными мета-данными, товары не будут найдены. Проверьте через базу или инструменты отладки, что мета-поля _stock и _stock_status реально существуют и заполнены.
  • Отсутствие запланированного события: Если WP-Cron отключен на хостинге, автоматический запуск не произойдет. Проверьте работу WP-Cron или настройте системный CRON для вызова wp-cron.php.
  • Права доступа: Убедитесь, что функция вызывается с правами администратора, иначе удаление может быть заблокировано.
  • Удаление вариаций товара: В случае переменных товаров удаление родительского товара удалит все вариации. Если нужно более тонкое управление, добавьте фильтрацию по типу товара.

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

  • Перед массовым удалением сделайте резервную копию базы данных.
  • Добавьте логирование в файл или базу, чтобы отслеживать, когда и какие товары удалялись.
  • Если у вас много товаров, разбивайте запрос на части с помощью параметров posts_per_page и paged, чтобы избежать таймаутов.
  • Отключайте WP-Cron на пиковых нагрузках, если это приводит к задержкам, и используйте системный CRON.

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

МетодОписаниеПлюсыМинусы
Ручное удаление через админку Удаление товаров по фильтру вручную Просто, без кода Трудоемко, риск пропуска товаров
Использование плагинов Автоматизация с помощью готовых плагинов для очистки каталога Удобно, поддержка Дополнительная нагрузка, возможны конфликты
Код с WP-Cron (описанный метод) Автоматическое удаление через кастомный код Легко кастомизировать, не нагружает сайт Требует навыков, нужно контролировать WP-Cron
WooCommerce: как автоматически удалять товар из каталога при отсутствии на складе
17.05.2026
Как использовать WPCommunity для создания собственного форума на WordPress
26.03.2026
Как установить охранные роли в WordPress для доступа к административной панели
09.03.2026
Как создать настройку автоудаления старых ревизий записей в WordPress
16.03.2026
WooCommerce: как автоматически отключить отложенные оплаты при превышении срока
21.06.2026