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 «Товары» → фильтр по наличию → удаление
Автоматизация управления пользовательскими ролями в WordPress
21.03.2026
Автоматическое удаление старых ревизий в WordPress с помощью кода
30.01.2026
Автоматическое удаление неактивных пользователей WordPress
14.04.2026
Как создать динамические блоки с ключевыми словами в WordPress
26.01.2026
Оптимизация базы данных WordPress: практические советы и примеры кода
09.11.2025