wpmoney.ru wordpress WP Money

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

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

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

Автоматизация удаления таких товаров с помощью кода позволяет поддерживать базу магазина в актуальном состоянии и улучшить производительность.

Как проверить наличие товаров с нулевым остатком

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

wp post list --post_type=product --meta_key=_stock --meta_value=0 --fields=ID,post_title

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

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

Реализуем удаление товаров с помощью WP_Query и функции wp_delete_post(). Код можно добавить в файл functions.php вашей темы или создать отдельный плагин для безопасного выполнения.

function delete_zero_stock_products() {
    // Параметры запроса: товары с мета-ключом '_stock' равным 0
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => '_stock',
                'value'   => '0',
                'compare' => '=',
                'type'    => 'NUMERIC',
            ],
        ],
        'fields'         => 'ids', // Получаем только ID для оптимизации
    ];

    $query = new WP_Query( $args );

    if ( ! empty( $query->posts ) ) {
        foreach ( $query->posts as $product_id ) {
            // Удаляем товар без возможности восстановления (force delete)
            wp_delete_post( $product_id, true );
        }
    }
}

// Запускаем функцию при инициализации (удалять вручную для безопасности)
// add_action( 'init', 'delete_zero_stock_products' );

Важно: не запускайте функцию автоматически без проверки, чтобы не удалить нужные товары. Лучше вызвать её вручную через консоль WP-CLI или временно активировать хук.

Как запустить удаление вручную через WP-CLI

Создайте файл delete-zero-stock.php в корне сайта с кодом функции и добавьте в конец:

delete_zero_stock_products();

Затем запустите:

wp eval-file delete-zero-stock.php

После выполнения удалите или переименуйте файл.

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

Чтобы убедиться, что товары удалены:

  • Повторите команду WP-CLI для списка товаров с нулевым остатком — список должен быть пуст.
  • Проверьте в админке WooCommerce раздел «Товары» — товары с нулевым остатком должны отсутствовать.
  • Просмотрите фронтенд магазина, чтобы убедиться, что отсутствуют товары с нулевым запасом.

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

  • Удаление не происходит: проверьте, что у пользователя, под которым запускается скрипт, есть права на удаление постов.
  • Функция вызывается автоматически и удаляет товары без проверки: уберите хук или закомментируйте вызов функции, используйте ручной запуск.
  • Нулевой запас указан в другом мета-ключе: в WooCommerce может использоваться мета-ключ _stock_status с значением outofstock. В этом случае измените запрос:
'meta_query' => [
    [
        'key'     => '_stock_status',
        'value'   => 'outofstock',
        'compare' => '=',
    ],
],

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

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

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

МетодОписаниеПреимуществаНедостатки
Ручное удаление через админку Удаление товаров вручную в WooCommerce Простота, не требует кода Длительно, неудобно при большом количестве
WP-CLI Использование командной строки для удаления Быстро, подходит для большого объема Требуется доступ к серверу и знания CLI
Код на PHP (WP_Query + wp_delete_post) Автоматизация удаления через код Гибко, можно запускать по расписанию Риск ошибочного удаления, требует тестирования
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙