Удаление товаров WooCommerce со статусом «В очереди» через PHP-код

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

В WooCommerce товары могут иметь разный статус публикации: опубликованные, черновики, запланированные или статус «в очереди» (pending). Статус «в очереди» обычно используется для товаров, которые ожидают проверки или публикации. Если на вашем сайте накопилось много таких товаров, они могут мешать управлению каталогом, создавать нагрузку на базу данных и запутывать администраторов.

Стандартного интерфейса для массового удаления товаров с этим статусом нет, а вручную удалять по одному неудобно. Нужно программное решение.

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

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

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

function wpstock_delete_pending_products() {
    $args = array(
        'post_type'      => 'product',
        'post_status'    => 'pending',
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $pending_products = get_posts( $args );

    if ( empty( $pending_products ) ) {
        return 'Нет товаров со статусом "В очереди" для удаления.';
    }

    foreach ( $pending_products as $product_id ) {
        wp_delete_post( $product_id, true ); // true - без перемещения в корзину
    }

    return count( $pending_products ) . ' товаров со статусом "В очереди" удалены.';
}

2. Запуск функции вручную через WP-CLI

Если у вас есть доступ к WP-CLI — это самый удобный способ. Создайте простой PHP-скрипт, например delete-pending-products.php с вызовом функции, и выполните команду:

wp eval-file delete-pending-products.php

В файле delete-pending-products.php должно быть:

include 'wp-load.php';
echo wpstock_delete_pending_products();

3. Создание админ-страницы для удаления товаров

Если WP-CLI недоступен, добавьте админ-страницу с кнопкой для запуска функции:

add_action('admin_menu', function() {
    add_submenu_page(
        'woocommerce',
        'Удаление товаров в очереди',
        'Удаление Pending',
        'manage_woocommerce',
        'delete-pending-products',
        'wpstock_render_delete_pending_page'
    );
});

function wpstock_render_delete_pending_page() {
    if ( isset($_POST['delete_pending']) ) {
        $result = wpstock_delete_pending_products();
        echo '<div class="notice notice-success is-dismissible"><p>' . esc_html($result) . '</p></div>';
    }
    echo '<h1>Удаление товаров со статусом "В очереди"</h1>';
    echo '<form method="post"><input type="submit" name="delete_pending" class="button button-primary" value="Удалить все товары в очереди" /></form>';
}

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

  • Зайдите в админку WooCommerce - Товары, отфильтруйте по статусу «В очереди» (Pending). Если после запуска скрипта таких товаров нет, значит удаление прошло успешно.
  • Для проверки через WP-CLI выполните wp post list --post_type=product --post_status=pending — список должен быть пуст.
  • Обратите внимание на сообщения об успешном удалении, они выводятся в админ-странице или консоли.

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

  • Нет доступа к функциям WP: Код должен выполняться в контексте WordPress. Для WP-CLI используйте wp eval-file, для админки — подключайте код через functions.php или плагин.
  • Права пользователя: Для запуска удаления нужен пользователь с правами manage_woocommerce или админ. Иначе админ-страница и кнопка не будут доступны.
  • Большое количество товаров: При большом объёме товаров удаление может привести к таймауту. В этом случае разбивайте удаление на партии с помощью posts_per_page и запускайте несколько раз.
  • Не тот статус: Убедитесь, что товары именно со статусом pending. Иногда используются кастомные статусы, их нужно проверять отдельно.

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

  • Перед массовым удалением обязательно создайте резервную копию базы данных.
  • Не используйте wp_delete_post без второго параметра true, чтобы избежать попадания товаров в корзину, если нужна полная очистка.
  • Для больших магазинов запускайте удаление в несколько шагов, чтобы не перегружать сервер.
  • Ограничьте доступ к админ-странице удаления только администраторам или менеджерам WooCommerce.
  • Если используете этот код регулярно, лучше реализовать его в виде плагина с безопасным интерфейсом и логированием действий.

Сравнение способов удаления товаров со статусом «В очереди»

МетодПреимуществаНедостатки
WP-CLIБыстрое и удобное выполнение, подходит для больших объёмовТребует SSH-доступа и знаний командной строки
Админ-страница с кнопкойПростой интерфейс для администраторов без доступа к серверуМожет быть медленным при большом количестве товаров, требует контроля прав доступа
Ручное удаление через админку WooCommerceНе требует программированияОчень неудобно при большом количестве товаров, высок риск пропустить товары
Как добавить собственные настройки в админ-панель WordPress
02.12.2025
Как реализовать автоматический редирект после входа в WordPress
27.01.2026
WooCommerce: автоматическое отключение оплаты для товаров с определённым статусом
18.07.2026
Как удалить неиспользуемые теги в WordPress
05.01.2026
Как создать уникальные системы авторизации в WordPress
09.02.2026