WPFAQ

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

Проблема: наличие товаров без остатка в каталоге WooCommerce

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

Диагностика проблемы

Для начала убедитесь, что у вас включено управление складом в WooCommerce и корректно ведутся остатки товаров. Чтобы проверить наличие товаров без склада, можно выполнить SQL-запрос напрямую в базе данных или использовать WP CLI:

wp post list --post_type=product --meta_key=_stock --meta_value=0 --meta_compare=<=

Этот запрос выведет ID товаров с запасом ≤ 0. Если таких много, есть смысл автоматизировать их удаление.

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

1. Создаем функцию для удаления товаров с нулевым или отрицательным запасом

function wc_delete_out_of_stock_products() {
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => array(
            array(
                'key'     => '_stock',
                'value'   => 0,
                'compare' => '<=',
                'type'    => 'NUMERIC',
            ),
        ),
        'fields' => 'ids',
    );
    $products = get_posts($args);

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

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

2. Запускаем функцию по расписанию через WP-Cron

Добавьте в functions.php или в собственный плагин код для регистрации события и его обработки:

// Регистрация еженедельного события
add_action('wp', function() {
    if (!wp_next_scheduled('wc_delete_out_of_stock_daily')) {
        wp_schedule_event(time(), 'daily', 'wc_delete_out_of_stock_daily');
    }
});

// Хук на событие
add_action('wc_delete_out_of_stock_daily', 'wc_delete_out_of_stock_products');

3. Запуск функции вручную для проверки

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

wp eval 'wc_delete_out_of_stock_products();'

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

  • Через админ-панель WooCommerce перейдите в раздел «Товары» и проверьте, что товары с запасом ≤ 0 удалены.
  • Используйте WP CLI команду для проверки наличия товаров без склада:
wp post list --post_type=product --meta_key=_stock --meta_value=0 --meta_compare=<=

Если команда не возвращает товаров, значит автоматическое удаление работает корректно.

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

  • Товары не удаляются: Проверьте, включено ли управление запасами в WooCommerce (WooCommerce > Настройки > Товары > Управление запасами). Без включенного управления метаполе _stock может отсутствовать.
  • Удаляются не те товары: Убедитесь, что метаполе _stock действительно содержит числовое значение. Иногда плагины могут использовать другие способы хранения остатков.
  • Функция не запускается по расписанию: Проверьте, работают ли WP-Cron события на вашем хостинге. На некоторых серверах cron отключен. Можно настроить системный cron для вызова WP-Cron.
  • Удаление занимает слишком много времени: Если товаров много, разбейте удаление на части с помощью пагинации в запросе.

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

  • Всегда делайте резервную копию базы данных перед массовым удалением товаров.
  • Для больших магазинов лучше использовать пакетную обработку, чтобы избежать таймаутов.
  • Добавьте логирование удалений для контроля, например, через error_log или в отдельный файл.
  • Если нужно не удалять, а скрывать товары без склада, используйте статус 'private' или 'draft' вместо удаления.

Сравнение подходов к удалению товаров без склада

МетодПлюсыМинусы
Плагин для очистки каталогаГотовое решение, интерфейсМожет быть избыточным, нагружает сайт
Собственный код с WP-CronТочный контроль, автоматизацияТребует навыков разработки и тестирования
Ручное удаление через админкуПростотаТрудоемко, риск пропуска товаров
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее