wpnotes.ru wordpress WP Notes

Как удалить товары из WooCommerce без плагинов: пошаговое руководство

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

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

Кроме того, массовое удаление через интерфейс может быть неудобным и медленным при большом количестве товаров.

Пошаговое решение: удаляем товары программно через WP-CLI и кастомный PHP-скрипт

1. Использование WP-CLI для массового удаления товаров

Если у вас есть доступ к SSH, WP-CLI — самый быстрый и безопасный способ удалить товары без плагинов.

wp post delete $(wp post list --post_type=product --format=ids) --force

Команда wp post list получает ID всех товаров, а wp post delete удаляет их принудительно с удалением из базы.

2. Кастомный PHP-скрипт для удаления товаров с очисткой метаданных

Если WP-CLI недоступен, можно написать скрипт, который удалит товары и связанные данные.

function delete_all_woocommerce_products() {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'post_status' => 'any',
        'fields' => 'ids',
    ];

    $product_ids = get_posts($args);

    foreach ($product_ids as $product_id) {
        // Удаляем связанные мета-данные
        delete_post_meta($product_id, '_price');
        delete_post_meta($product_id, '_stock_status');
        // Удаляем товар
        wp_delete_post($product_id, true);
    }
}

add_action('admin_init', function() {
    if (current_user_can('manage_woocommerce') && isset($_GET['delete_all_products'])) {
        delete_all_woocommerce_products();
        wp_redirect(admin_url('edit.php?post_type=product&deleted=1'));
        exit;
    }
});

После добавления этого кода в файл functions.php вашей темы вызовите URL https://your-site.com/wp-admin/edit.php?post_type=product&delete_all_products=1 – это запустит удаление.

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

  • Проверьте, что в разделе «Товары» в админке WooCommerce пусто или количество товаров уменьшилось.
  • Запустите SQL-запрос в базе данных:
    SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product'; — должно вернуть 0 или ожидаемое количество.
  • Проверьте таблицу wp_postmeta на наличие мета-данных для удалённых товаров:
    SELECT COUNT(*) FROM wp_postmeta WHERE post_id NOT IN (SELECT ID FROM wp_posts); — должно быть 0.

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

  • Ошибка: Товары не удаляются с ошибкой "Удаление невозможно".
    Причина: Недостаточно прав пользователя или WP-CLI не установлен.
    Решение: Проверьте права пользователя, используйте администратора, или попробуйте PHP-скрипт.
  • Ошибка: Метаданные остаются в базе.
    Причина: Не все мета-данные удаляются автоматически.
    Решение: Включите в скрипт удаление всех связанных мета-данных и кастомных таблиц, если они есть.
  • Ошибка: Медиафайлы товаров остаются.
    Причина: Медиа не удаляется при удалении записи.
    Решение: Дополните скрипт удалением вложений через wp_delete_attachment().

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

  • Перед массовым удалением сделайте полную резервную копию базы данных.
  • Не запускайте скрипты удаления на живом сайте без предварительного тестирования на копии.
  • Удаление большого количества товаров может нагрузить сервер — разбивайте удаление на части (например, по 100 товаров за раз).
  • Для удаления медиа используйте следующий пример кода:
function delete_product_attachments($product_id) {
    $attachments = get_attached_media('', $product_id);
    foreach ($attachments as $attachment) {
        wp_delete_attachment($attachment->ID, true);
    }
}

Вызовите delete_product_attachments($product_id) перед удалением товара.

Сравнение методов удаления товаров в WooCommerce

МетодПлюсыМинусы
Удаление через админкуПросто, без кодаМедленно, не удаляет все метаданные и вложения
WP-CLIБыстро, удаляет записи с forceТребует SSH доступа, базовых навыков командной строки
Кастомный PHP-скриптГибко, можно настроить удаление метаданных и медиаТребует знаний PHP, возможны ошибки при неправильной реализации
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше