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

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

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

Для диагностики: зайдите в админку WooCommerce - Товары, добавьте фильтр по запасам "нет в наличии". Если таких товаров много и они не удаляются автоматически, стоит автоматизировать процесс.

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

1. Создаем PHP-функцию и подключаем к крону WordPress

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

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

    $products = get_posts($args);

    if (empty($products)) {
        return;
    }

    foreach ($products as $product_id) {
        wp_delete_post($product_id, true); // удаление без возможности восстановления
    }
}

// Регистрируем событие в крон
if (!wp_next_scheduled('cyrtolat_daily_delete_out_of_stock')) {
    wp_schedule_event(time(), 'daily', 'cyrtolat_daily_delete_out_of_stock');
}

add_action('cyrtolat_daily_delete_out_of_stock', 'cyrtolat_delete_out_of_stock_products');

2. Как запустить вручную для проверки

Для проверки работы функции без ожидания крон-события вставьте в functions.php временно:

add_action('init', function() {
    if (isset($_GET['run_delete_outofstock']) && current_user_can('manage_woocommerce')) {
        cyrtolat_delete_out_of_stock_products();
        exit('Удаление завершено');
    }
});

После этого вызовите в браузере https://ваш-сайт.ru/?run_delete_outofstock=1 под админом. Убедитесь, что товары с нулевым остатком удалились.

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

  • Перейдите в админку WooCommerce » Товары, примените фильтр "нет в наличии". Там не должно быть удалённых товаров.
  • Проверьте логи крон-задач (если есть плагин WP Crontrol), что задача выполняется ежедневно.
  • Проверьте на сайте, что товары с 0 остатком не отображаются в каталоге.

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

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

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

  • Для больших магазинов с тысячами товаров используйте пакетную обработку, например, удаляйте по 50 товаров за один запуск, чтобы избежать таймаута.
  • Создайте резервную копию базы данных перед автоматическим удалением.
  • Используйте хук wp_schedule_event с интервалом "daily" или настройте на менее частое выполнение, если обновления склада редкие.
  • Не удаляйте товары с активными заказами – для этого можно расширить запрос, исключая товары с заказами в статусах обработки или завершен.

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

МетодПлюсыМинусыКогда использовать
Ручное удаление через админкуПростота, не требует кодаТрудоемко при большом ассортиментеМаленькие магазины
Код с WP-Cron (как в статье)Автоматизация, гибкостьТребует навыков, возможен таймаут при большом объемеСредние и крупные магазины
Плагины для управления складомРасширенный функционалМожет влиять на производительность, требуются настройкиСложные сценарии, интеграция с ERP

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как массово удалить или изменить атрибуты ALT изображений в WordPress
23.03.2026
Как сделать автоматическую оптимизацию базы данных WordPress без плагинов
10.02.2026
Как создать автоматический sitemap в WordPress без плагинов
12.04.2026
WooCommerce: автоматическое отключение неактивных способов оплаты по геолокации
07.07.2026
Как избежать проблем с кэшированием в WordPress: практические советы
02.03.2026
×

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

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

пишет статьи

готовит SEO

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

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