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

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

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

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

Использование WP-Cron для автоматической проверки остатков

Для автоматического удаления товаров необходимо регулярно проверять остаток на складе и удалять товары с нулевым остатком. Для этого создадим функцию и зарегистрируем её выполнение через WP-Cron.

function wpm_delete_out_of_stock_products() {
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => array(
            array(
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => '='
            )
        )
    );
    $query = new WP_Query($args);
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            wp_delete_post(get_the_ID(), true); // Удаляем безвозвратно
        }
        wp_reset_postdata();
    }
}

// Регистрируем событие при активации темы или плагина
function wpm_schedule_delete_products() {
    if (!wp_next_scheduled('wpm_cron_delete_out_of_stock_products')) {
        wp_schedule_event(time(), 'daily', 'wpm_cron_delete_out_of_stock_products');
    }
}
add_action('wp', 'wpm_schedule_delete_products');
add_action('wpm_cron_delete_out_of_stock_products', 'wpm_delete_out_of_stock_products');

Как добавить отмену задачи при деактивации

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

function wpm_clear_delete_products_schedule() {
    $timestamp = wp_next_scheduled('wpm_cron_delete_out_of_stock_products');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpm_cron_delete_out_of_stock_products');
    }
}
// Вызовите эту функцию при деактивации вашего плагина или темы
// register_deactivation_hook(__FILE__, 'wpm_clear_delete_products_schedule');

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

  • Перейдите в раздел "Товары" в админке WooCommerce
  • Убедитесь, что товары с мета-полем _stock_status равным outofstock удалены
  • Для теста можно вручную изменить статус товара на "нет в наличии" и запустить крон-функцию вручную:
wpm_delete_out_of_stock_products();

Если товары удаляются — решение работает корректно.

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

  • Крон-задача не выполняется: Проверьте, включён ли WP-Cron на вашем хостинге. Для этого создайте файл wp-cron-test.php с вызовом wp_cron() или воспользуйтесь плагином WP Crontrol.
  • Товары не удаляются, хотя в наличии 0: Убедитесь, что мета-поле _stock_status действительно принимает значение outofstock. В некоторых случаях может использоваться другое поле, например, _stock.
  • Удаление происходит не полностью: Используйте wp_delete_post(get_the_ID(), true); с параметром true для безвозвратного удаления, иначе товар попадёт в корзину.

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

  • Оптимизация запроса: При большом количестве товаров используйте постраничный запрос с posts_per_page и paged, чтобы избежать превышения лимита памяти.
  • Бэкапы: Перед автоматическим удалением рекомендуется настроить автоматические резервные копии базы данных, чтобы можно было восстановить данные в случае ошибки.
  • Логирование: Добавьте в функцию логирование удалённых товаров для последующего аудита.

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

МетодОписаниеПреимуществаНедостатки
WP-Cron + кодАвтоматическая проверка и удаление товаров программноГибкость, контроль, не требует сторонних плагиновЗависимость от WP-Cron, требует навыков PHP
Плагины управления складомАвтоматизация через готовые решенияПростота настройки, поддержкаМожет быть тяжеловесным, платные функции
Ручное удалениеАдминка WooCommerce или SQL-запросыПростота для небольших магазиновТрудозатратно, риск ошибок
Как создать умное автопоздравление в WordPress с помощью WPMeta
15.02.2026
Как защитить WordPress от bruteforce атак с помощью плагинов и кода
05.01.2026
Как правильно работать с post meta в WordPress без ошибок
23.01.2026
Как создать автоматические записи в WordPress с помощью WPMeta
30.03.2026
Как использовать REST API для управления пользователями в WordPress
10.12.2025

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