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

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

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

Проверьте, что у вас включен учет остатков и корректно обновляются значения stock_quantity и статус stock_status у товаров. Без этого автоматизация будет работать некорректно.

Проверка состояния товара в базе

Для диагностики используйте WP-CLI или SQL-запросы, например:

SELECT ID, post_title, meta_key, meta_value FROM wp_posts p
JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE post_type = 'product' AND (meta_key = '_stock' OR meta_key = '_stock_status');

Убедитесь, что _stock_status равен outofstock для товаров без остатков.

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

1. Добавление функции в functions.php или отдельный плагин

Реализуем функцию, которая будет запускаться по расписанию и удалять товары со статусом outofstock.

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

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

// Запускаем через WP-Cron ежедневно
if (!wp_next_scheduled('wpmeta_daily_delete_outofstock')) {
    wp_schedule_event(time(), 'daily', 'wpmeta_daily_delete_outofstock');
}
add_action('wpmeta_daily_delete_outofstock', 'wpmeta_delete_outofstock_products');

2. Тестирование функции вручную

Чтобы проверить работу до запуска по расписанию, вызовите функцию вручную в админке или добавьте временный вызов:

add_action('admin_init', function() {
    if (current_user_can('administrator')) {
        wpmeta_delete_outofstock_products();
    }
});

После вызова проверьте, что товары с _stock_status = 'outofstock' удалены из базы.

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

  • Зайдите в раздел «Товары» и отфильтруйте по статусу «Нет в наличии» — список должен быть пустым.
  • Используйте SQL-запрос из раздела диагностики, чтобы убедиться, что таких товаров нет.
  • Проверьте логи WP-Cron (плагины типа WP Crontrol помогут) для подтверждения ежесуточного запуска задачи.

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

  • Задача WP-Cron не запускается. Проверьте, включен ли WP-Cron в WordPress (DISABLE_WP_CRON не должен быть true) и что на сервере есть реальный трафик или настройте системный cron для запуска wp-cron.php.
  • Удаление не происходит, хотя товары есть с outofstock. Убедитесь, что статус _stock_status обновляется правильно — иногда плагины управления складом могут использовать собственные мета-поля.
  • Удаление приводит к потере важных данных. По возможности делайте резервные копии базы перед запуском, либо вместо удаления используйте переключение статуса или перемещение товаров в отдельную категорию.

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

  • Для больших магазинов с тысячами товаров лимитируйте количество удаляемых товаров за один запуск, чтобы избежать тайм-аутов. Например, добавьте 'posts_per_page' => 100 и запускайте задачу несколько раз.
  • Добавьте логирование удалений для аудита (например, запись ID удаленных товаров в отдельный файл или таблицу).
  • Если используете сторонние плагины складского учета, убедитесь, что они не конфликтуют с вашим скриптом по обновлению статусов.

Сравнение вариантов реализации автоматического удаления товаров

МетодПлюсыМинусыКомпромисс
WP-Cron с кастомной функцией (как в статье)Полный контроль, бесплатно, легко настроитьЗависит от работы WP-Cron, возможны тайм-ауты при большом количестве товаровДобавить лимит и логирование
Плагин для управления складом с автоматическим удалениемГотовое решение, интеграция с другими функциями складаПлатно, может перегрузить систему, ограниченная кастомизацияИспользовать для среднего и малого магазина
Внешние скрипты и cron на сервереНезависимость от WP-Cron, стабильностьСложнее в настройке, требует доступа к серверуДля крупных магазинов с высокими требованиями
WordPress авторизация по телефону без пароля: настройка и лучшие плагины
16.03.2026
Как создать автоматические записи в WordPress с помощью WPMeta
27.03.2026
Как сделать автоматический импорт из XML в WordPress
08.03.2026
Как удалить версию WordPress из header и footer: защита сайта от уязвимостей
16.11.2025
Как удалить или скрыть post meta в WordPress без плагинов
05.02.2026

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