Как удалить неактивные товары WooCommerce с помощью кода

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

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

Неактивные товары — это товары со статусом draft, pending или private. В некоторых случаях нужно удалить и товары с меткой outofstock.

Как проверить, какие товары неактивны

SELECT ID, post_title, post_status FROM wp_posts WHERE post_type = 'product' AND post_status IN ('draft', 'pending', 'private');

Этот запрос покажет список товаров, которые не опубликованы.

Пошаговое решение: удаление неактивных товаров через PHP-код

Ниже пример PHP-функции, которую можно добавить в functions.php темы или создать отдельный плагин для однократного выполнения. Функция удаляет все товары с указанными статусами.

function wpnews_delete_inactive_products() {
    $args = [
        'post_type' => 'product',
        'post_status' => ['draft', 'pending', 'private'],
        'posts_per_page' => -1,
        'fields' => 'ids',
    ];

    $query = new WP_Query($args);
    if ($query->have_posts()) {
        foreach ($query->posts as $product_id) {
            wp_delete_post($product_id, true); // true — удаление без промежуточной корзины
        }
    }
}

// Запуск функции однократно (например, при активации плагина)
// wpnews_delete_inactive_products();

Если хотите удалить товары с нулевым остатком, добавьте проверку мета-поля _stock_status:

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

    $query = new WP_Query($args);
    if ($query->have_posts()) {
        foreach ($query->posts as $product_id) {
            wp_delete_post($product_id, true);
        }
    }
}

// wpnews_delete_outofstock_products();

Как проверить, что удаление сработало

  • В админке WooCommerce в разделе «Товары» проверьте, что неактивные товары исчезли.
  • Запустите SQL-запрос из раздела диагностики еще раз — он должен вернуть пустой результат.
  • Проверьте размер таблицы wp_posts и wp_postmeta, чтобы убедиться, что записи удалены.

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

  • Товары не удаляются: убедитесь, что функция вызывается. Добавьте временное действие add_action('init', 'wpnews_delete_inactive_products'); для теста, затем удалите.
  • Удаляются не все товары: проверьте, что статус товара совпадает с заданным в запросе. Для сложных условий используйте WP_Meta_Query.
  • Удаление не учитывает вариации: вариации — отдельные посты типа product_variation, их тоже нужно удалять отдельно.
  • Проблемы с правами доступа: функция должна запускаться с правами администратора, особенно при добавлении в плагин.

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

  • Перед удалением сделайте полное резервное копирование базы данных.
  • Для больших магазинов удаляйте товары по частям, используя posts_per_page с пагинацией, чтобы избежать таймаутов.
  • Не запускайте удаление на публичной части сайта — используйте админский хук или WP-CLI.
  • Для автоматизации через WP-CLI команда может выглядеть так:
wp post delete $(wp post list --post_type=product --post_status=draft,pending,private --field=ID) --force

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

МетодОписаниеПлюсыМинусы
PHP-функция в теме/плагинеУдаление через WP_Query и wp_delete_post()Гибкий, можно доработать под задачиНужно запускать вручную, риск ошибок без бэкапа
WP-CLIУдаление через командную строкуБыстро, безопасно, можно скриптоватьТребует доступа к серверу и знаний WP-CLI
Плагины очисткиАвтоматизация с UIУдобно для новичковМожет не учитывать все нюансы, лишний плагин
Как установить и настроить очистку базы данных WordPress от остаточных данных
04.04.2026
Как удалить или изменить атрибуты товаров WooCommerce через код
01.05.2026
Как использовать WordPress Hooks для защиты от спама
26.02.2026
Как удалить проблемы с дубликатами контента в WordPress
16.05.2026
Как создать динамические таблицы в WordPress с помощью шорткодов
05.01.2026