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

Диагностика проблемы с отсутствующими товарами в WooCommerce

Отсутствующие товары в WooCommerce — это товары, у которых установлен статус «нет в наличии» (stock status – out of stock) и которые не предполагается пополнять. Такие товары могут засорять каталог и ухудшать пользовательский опыт, а также негативно влиять на SEO и производительность сайта. Особенно актуально для крупных магазинов с тысячами товаров.

Чтобы понять, есть ли на вашем сайте подобные товары, выполните запрос в базе данных или воспользуйтесь административной панелью WooCommerce, отфильтровав товары по статусу наличия.

Пример запроса для диагностики отсутствующих товаров через WP-CLI:

wp post list --post_type=product --meta_key=_stock_status --meta_value=outofstock --fields=ID,post_title --format=table

Если количество таких товаров значительное и они не планируются к пополнению, имеет смысл автоматизировать их удаление.

Пошаговое решение: автоматическое удаление отсутствующих товаров по расписанию

Для реализации задачи воспользуемся встроенным планировщиком WordPress (WP-Cron) и функциями WooCommerce для выборки и удаления продуктов.

1. Создание функции удаления товаров со статусом "outofstock"

function wpdirect_delete_outofstock_products() {
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_key'       => '_stock_status',
        'meta_value'     => 'outofstock',
        'fields'         => 'ids',
        'post_status'    => 'publish',
    ];

    $products = get_posts($args);

    if (empty($products)) {
        return;
    }

    foreach ($products as $product_id) {
        wp_delete_post($product_id, true); // true - удаление без отправки в корзину
    }
}

2. Регистрация задачи в WP-Cron

Добавим в файл functions.php вашей темы или в кастомный плагин следующий код:

if (! wp_next_scheduled('wpdirect_cron_delete_outofstock')) {
    wp_schedule_event(time(), 'daily', 'wpdirect_cron_delete_outofstock');
}

add_action('wpdirect_cron_delete_outofstock', 'wpdirect_delete_outofstock_products');

Этот код запланирует ежедневное выполнение функции удаления.

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

  • Выполните запрос через WP-CLI: wp post list --post_type=product --meta_key=_stock_status --meta_value=outofstock и убедитесь, что товары отсутствуют.
  • Проверьте раздел «Товары» в админке WooCommerce, фильтруя по статусу наличия "Нет в наличии" — таких товаров не должно быть.
  • Для срочной проверки можно запустить функцию вручную, добавив временный вызов wpdirect_delete_outofstock_products(); в functions.php и обновив страницу.

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

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

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

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

Чек-лист для внедрения автоматического удаления отсутствующих товаров:

  1. Проверить наличие товаров со статусом outofstock.
  2. Добавить функцию удаления в functions.php или плагин.
  3. Настроить WP-Cron на ежедневный запуск задачи.
  4. Проверить работу WP-Cron или настроить системный cron.
  5. Протестировать функцию вручную для контроля.
  6. Настроить логирование и мониторинг выполнения.
  7. Обеспечить резервное копирование до запуска.

Сравнение вариантов решения

ВариантПреимуществаНедостаткиКогда использовать
WP-Cron с функцией удаленияПростота реализации, не требует доступа к серверуЗависит от посещаемости сайта, возможны задержкиМаленькие и средние сайты, ограниченный доступ к серверу
Системный cron + WP-CLI скриптНадежность, точность исполнения, подходит для больших сайтовТребует доступа к серверу, настройку cronКрупные магазины, высокая нагрузка
Плагины для управления удалениемГотовые интерфейсы, дополнительные настройкиЗависимость от стороннего кода, возможная нагрузкаДля пользователей без навыков программирования
Как настроить отключение автоматических обновлений в WordPress
01.03.2026
Как отключить автоматические обновления WordPress для плагинов и тем
21.03.2026
Как создать собственный виджет WordPress
28.11.2025
WooCommerce: автоматическое удаление отсутствующих товаров по расписанию
03.07.2026
Как создать автоматический импорт постов из Google Sheets в WordPress
15.04.2026