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

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

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

Стандартный WooCommerce позволяет скрывать товары без остатков, но не удаляет их автоматически. Если вам нужен именно функционал удаления, его придется реализовать самостоятельно.

Как проверить, что товар действительно не в наличии

WooCommerce хранит данные о запасах товара в метаполях и в самой базе. Основные параметры — _stock (количество на складе) и _stock_status (статус наличия: 'instock', 'outofstock').

Чтобы убедиться, что товар отсутствует на складе, проверим оба параметра. Обычно достаточно смотреть на _stock_status.

Пример SQL-запроса для проверки товаров без остатков

SELECT p.ID, p.post_title, pm.meta_value as stock_status FROM wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id AND pm.meta_key = '_stock_status'
WHERE p.post_type = 'product' AND pm.meta_value = 'outofstock';

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

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

1. Добавление задачи в WP-Cron

function wpelement_schedule_stock_cleanup() {
    if ( ! wp_next_scheduled( 'wpelement_delete_outofstock_products' ) ) {
        wp_schedule_event( time(), 'daily', 'wpelement_delete_outofstock_products' );
    }
}
add_action( 'wp', 'wpelement_schedule_stock_cleanup' );

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

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

    $products = get_posts( $args );

    foreach ( $products as $product_id ) {
        wp_trash_post( $product_id );
    }
}
add_action( 'wpelement_delete_outofstock_products', 'wpelement_delete_outofstock_products' );

3. Очистка корзины после удаления (опционально)

Если требуется окончательное удаление (без корзины), можно вместо wp_trash_post использовать wp_delete_post( $product_id, true ). Однако рекомендуется сначала перемещать в корзину.

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

  • Запустите WP-Cron вручную с помощью плагина WP Crontrol или вызовите функцию напрямую.
  • Проверьте, что в админке WooCommerce товары со статусом outofstock исчезли или находятся в корзине.
  • Сделайте запрос к базе, чтобы удостовериться, что таких товаров нет или они помечены как удалённые.

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

  • Функция не запускается по крону. Проверьте, активирована ли задача в WP-Cron, и нет ли конфликтов в хуках.
  • Товары не удаляются. Убедитесь, что в запросе meta_query указано правильное значение 'outofstock', и что товары действительно имеют этот статус.
  • Удаляются не те товары. Проверьте, что post_type указан как product, а не, например, product_variation.
  • Отсутствует резервное копирование. Перед автоматическим удалением рекомендуется создавать резервные копии базы данных.

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

  • Не удаляйте товары без предварительного перемещения в корзину — это позволит восстановить их при ошибках.
  • Для больших магазинов с тысячами товаров ограничьте количество удаляемых записей за один запуск, добавив параметр 'posts_per_page' => 100 и реализовав пагинацию.
  • Используйте плагин Clearfy Pro (ссылка: https://wpshop.ru/plugins/clearfy-pro/) для расширенного управления автоматическими задачами и оптимизацией WooCommerce.
  • Регулярно проверяйте журнал ошибок сервера и WordPress для своевременного выявления проблем с удалением.

Сравнение вариантов удаления товаров по наличию

МетодПлюсыМинусы
Скрывать товары (стандарт WooCommerce)Безопасно, не теряются данныеТовары остаются в базе, могут занимать место
Автоматическое удаление через код (как в статье)Каталог всегда актуален, освобождает базуРиск потери данных, требует резервного копирования
Удаление через сторонние плагиныГотовые решения, часто с GUIЗависимость от плагина, возможны конфликты
Как автоматически удалять старые изображения в WordPress по расписанию
13.02.2026
Как создать автоматический импорт данных из Google Sheets в WordPress
04.02.2026
Как успешно отладить проблемы с отправкой писем из WordPress
28.05.2026
Автоматический импорт данных из внешнего API в WordPress
02.04.2026
Как удалить неактивных пользователей в WordPress: эффективные методы и примеры
19.11.2025