Как удалить неактивные товары 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
11.04.2026
Как удалить заблокированные или неактивные пользователи в WordPress с помощью кода
27.12.2025
Как использовать REST API для автоматического обновления новостей в WordPress
23.03.2026
WooCommerce: как установить и настроить индивидуальные ценовые правила для ролей пользователей
26.05.2026
Как сделать автоматический импорт новостей в WordPress из RSS
09.01.2026