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

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

⭐⭐⭐⭐⭐
Как создать адаптивный шорткод в WordPress для вывода контента
01.11.2025
Автоматическое изменение цены товара при обновлении заказа WooCommerce
25.04.2026
Как использовать хуки WordPress для эффективного контроля записей
06.12.2025
Как удалить лишние слова из заголовков постов WordPress автоматически
19.01.2026
Как создать собственный виджет WordPress с поддержкой AJAX
18.11.2025
×
Прокачай свой WordPress!

Скидка -20% на премиум темы и плагины

Воспользоваться сейчас ⋙