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

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

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

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

SELECT p.ID, p.post_title, pm.meta_value AS stock_quantity
FROM wp_posts p
JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE p.post_type = 'product'
AND pm.meta_key = '_stock'
AND CAST(pm.meta_value AS SIGNED) <= 0
AND p.post_status = 'publish';

Если таких товаров много, значит, нужна автоматизация их обработки.

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

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

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

function wp_puzzle_delete_out_of_stock_products() {
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => '_stock',
                'value'   => 0,
                'compare' => '<=',
                'type'    => 'NUMERIC',
            ],
        ],
        'post_status'    => 'publish',
        'fields'         => 'ids',
    ];

    $products = get_posts($args);
    if (!empty($products)) {
        foreach ($products as $product_id) {
            wp_trash_post($product_id); // Помещаем товар в корзину
        }
    }
}

2. Запускаем функцию по расписанию

Для регулярного запуска используйте WP-Cron. Добавьте в functions.php:

// Регистрируем cron-задание
if (! wp_next_scheduled('wp_puzzle_daily_stock_check')) {
    wp_schedule_event(time(), 'daily', 'wp_puzzle_daily_stock_check');
}

// Хук для выполнения задачи
add_action('wp_puzzle_daily_stock_check', 'wp_puzzle_delete_out_of_stock_products');

Так будет запускаться ежедневная очистка товаров с нулевым остатком.

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

Чтобы проверить, что скрипт работает:

  • В админке WooCommerce перейдите в «Товары» и проверьте, что товары с нулевым остатком переместились в корзину.
  • Для проверки вручную вызовите функцию через консоль WP-CLI или временно добавьте вызов wp_puzzle_delete_out_of_stock_products(); в functions.php и обновите любую страницу.
  • Проверьте логи ошибок и убедитесь, что запросы к базе отрабатывают без сбоев.

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

  • Товары не удаляются: Проверьте, что запас хранится в метаполе _stock. Если используется складской учет с вариациями, метаполя могут отличаться.
  • Удаляются нужные товары: Добавьте дополнительную проверку статуса запасов или используйте метаполя _manage_stock и _stock_status для точной фильтрации.
  • WP-Cron не запускается: Убедитесь, что на сервере правильно настроен cron или используйте внешние сервисы для вызова WP-Cron.

Практические советы по управлению запасами и безопасности

  • Перед удалением товаров создавайте резервные копии базы данных. Лучше перемещать товары в корзину, а не удалять сразу.
  • Для вариаций товаров напишите отдельный скрипт. Вариации хранятся как product_variation, и у них свои метаполя запасов.
  • Добавьте логирование работы скрипта. Записывайте удаленные ID в отдельный файл или базу, чтобы отслеживать историю.
  • Для больших магазинов используйте WP-CLI. Запуск через консоль ускорит процесс и снизит нагрузку.

Сравнение вариантов удаления товаров с нулевым остатком

МетодПреимуществаНедостатки
Код на PHP с WP-CronАвтоматизация внутри WordPress, гибкость настройкиЗависимость от WP-Cron, нагрузка при большом каталоге
Плагины управления складомГотовые решения, поддержка вариаций и отчетностиМогут быть платными, нагрузка на сайт
WP-CLI скриптыБыстрый и контролируемый запуск, подходит для больших сайтовНужен доступ по SSH, требует навыков командной строки

Пример кода для удаления вариаций с нулевым остатком

function wp_puzzle_delete_out_of_stock_variations() {
    $args = [
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => '_stock',
                'value'   => 0,
                'compare' => '<=',
                'type'    => 'NUMERIC',
            ],
        ],
        'post_status'    => 'publish',
        'fields'         => 'ids',
    ];

    $variations = get_posts($args);
    if (!empty($variations)) {
        foreach ($variations as $variation_id) {
            wp_trash_post($variation_id);
        }
    }
}

Добавьте вызов этой функции в крон вместе с основной для полного контроля запасов.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WordPress: как автоматически отключать неиспользуемые плагины для оптимизации сайта
07.03.2026
Как избежать конфликтов между плагинами WordPress: практические решения
13.01.2026
Оптимизация базы данных WordPress для ускорения сайта: практические советы и примеры
12.11.2025
WooCommerce: автоматическое создание вариантов товара при импорте CSV
18.05.2026
WordPress: решение проблемы с блокировкой сервисных роботов через robots.txt
24.01.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее