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

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

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

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

1. Использование плагинов

Плагины типа Clearfy Pro могут помочь с очисткой сайта, включая удаление неактивных товаров, но зачастую это комплексные решения с платной подпиской.

2. Самописный код для автоматического удаления

Для большей гибкости и контроля можно написать собственный скрипт на PHP, который будет запускаться по расписанию (WP-Cron).

Пошаговое решение: реализация автоудаления через WP-Cron

Шаг 1. Создаем функцию удаления товаров без наличия

function wpb_delete_out_of_stock_products() {
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                '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 для удаления без перехода в корзину
        }
    }
}

Шаг 2. Регистрируем событие WP-Cron для регулярного запуска

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

add_action('wpb_daily_stock_cleanup', 'wpb_delete_out_of_stock_products');

Шаг 3. Проверяем работу и при необходимости запускаем вручную

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

add_action('init', function() {
    if (current_user_can('administrator') && isset($_GET['run_stock_cleanup'])) {
        wpb_delete_out_of_stock_products();
        echo 'Удаление товаров без наличия выполнено';
        exit;
    }
});

После добавления этого кода зайдите на сайт в админке с параметром ?run_stock_cleanup=1 например https://example.com/wp-admin/?run_stock_cleanup=1 — при успешном выполнении удалится весь товар со статусом outofstock.

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

  • Проверьте, что товары со статусом outofstock действительно удаляются (вручную или через WP-Cron).
  • В админке WooCommerce в разделе «Товары» не должно быть товаров с состоянием «Нет в наличии».
  • Проверьте логи WP-Cron с помощью плагина WP Crontrol или аналогов.

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

  • Товары не удаляются: убедитесь, что функция вызывается, и WP-Cron работает (проверьте лог и наличие события wpb_daily_stock_cleanup).
  • Удаляются не те товары: проверьте правильность meta_query — значение _stock_status должно быть outofstock.
  • Удаление происходит, но товар остается в базе: возможно, установлены плагины резервного копирования или кеширования, блокирующие удаление. Очистите кеш и проверьте права пользователя.
  • WP-Cron не срабатывает по расписанию: настройте системный cron на сервере или запустите вручную для теста.

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

  • Удаляйте товары только с подтверждением, чтобы не потерять данные по ошибке (например, используйте дополнительную мета-метку auto_delete_ready).
  • Если товаров много, разбивайте удаление на порции, чтобы избежать превышения лимитов времени выполнения PHP.
  • Для запуска WP-Cron используйте системный cron на сервере — это надежнее, чем при посещениях сайта.
  • Перед автоматическим удалением делайте резервные копии базы данных.

Таблица сравнения вариантов удаления товаров без наличия

МетодПреимуществаНедостаткиПример
Плагин Clearfy Pro Готовое решение, дополнительные функции оптимизации Платный, избыточный функционал для простой задачи Clearfy Pro
Самописный код с WP-Cron Гибкость, контроль, бесплатность Требует знаний PHP, настройка cron Код из статьи выше
Ручное удаление через админку Простота без кода Неэффективно при большом количестве товаров WooCommerce «Товары» → фильтр по наличию → удаление
Как автоматически удалять неиспользуемые вариации товаров в WooCommerce
25.06.2026
WooCommerce: как удалить заблокированных и неактивных пользователей без плагинов
06.07.2026
WooCommerce: как правильно удалить варианты товаров без наличия
02.07.2026
Как добавить уникальные метатеги для каждого типа записи в WordPress
21.12.2025
Как создать динамические формы обратной связи в WordPress с примерами кода
05.02.2026