wpnotes.ru wordpress WP Notes

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

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

Избыточные товары — это те записи, которые вы больше не продаёте, не планируете обновлять или которые не должны отображаться на сайте, но не были корректно удалены. Они накапливаются в базе данных и замедляют работу магазина, усложняют администрирование и могут вводить покупателей в заблуждение.

Причины появления избыточных товаров:

  • Удаление товаров через админку без очистки связанных данных;
  • Миграции и импорт товаров с дублированием;
  • Автоматические импорты, добавляющие устаревшие позиции;
  • Ошибки в работе плагинов или кастомных скриптов.

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

1. Определяем товары для удаления

Для начала нужно понять, по каким критериям товары считать избыточными. Например, можно удалить продукты со статусом draft, pending или старше определённой даты без продаж.

Пример SQL-запроса для выборки товаров без заказов старше 6 месяцев:

SELECT p.ID, p.post_title FROM wp_posts p
LEFT JOIN wp_woocommerce_order_items oi ON oi.order_item_name = p.post_title
WHERE p.post_type = 'product'
AND p.post_status = 'publish'
AND p.post_date < DATE_SUB(NOW(), INTERVAL 6 MONTH)
AND oi.order_item_id IS NULL;

2. Создаём PHP-скрипт для удаления товаров

Удалять товары напрямую из базы не рекомендуется. Лучше использовать встроенные функции WordPress для корректного удаления и очистки связанных метаданных.

function delete_outdated_products() {
    $args = array(
        'post_type'      => 'product',
        'post_status'    => 'publish',
        'date_query'     => array(
            array(
                'before'    => '6 months ago',
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
        'meta_query'     => array(
            array(
                'key'     => '_sold_individually',
                'compare' => 'NOT EXISTS',
            ),
        ),
    );

    $query = new WP_Query($args);

    foreach ($query->posts as $product_id) {
        // Проверяем наличие заказов, связанных с продуктом
        $orders = wc_get_orders(array(
            'limit'        => 1,
            'status'       => 'completed',
            'product_id'   => $product_id
        ));
        if (empty($orders)) {
            wp_delete_post($product_id, true); // принудительное удаление
        }
    }
}

Вызовите функцию один раз (например, через файл темы или WP-CLI), чтобы избежать повторного удаления.

3. Настройка безопасного запуска и резервного копирования

Перед удалением обязательно сделайте бэкап базы данных. Запускать скрипт лучше через WP-CLI или временный PHP-файл с защитой, чтобы избежать случайных повторных вызовов.

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

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

  • В админке WooCommerce откройте список товаров и проверьте, что устаревшие позиции отсутствуют;
  • Сделайте SQL-запрос, аналогичный тому, что был в диагностике — он должен возвращать пустой результат;
  • Проверьте, что сайт и страницы товаров загружаются быстро и без ошибок;
  • Если есть кэш, очистите его, чтобы увидеть актуальные данные.

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

  • Удаление напрямую из базы без wp_delete_post(): приводит к оставлению метаданных и orphan-записей, что замедляет сайт. Решение — всегда использовать wp_delete_post.
  • Игнорирование связанных заказов: удаление товара с активными заказами нарушает целостность данных. Проверяйте наличие заказов через wc_get_orders.
  • Запуск скрипта без ограничений: может вызвать массовое удаление не тех товаров. Используйте фильтры по дате и статусу.
  • Отсутствие резервного копирования: потеря данных при ошибках. Всегда делайте бэкап перед изменениями.

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

  • Для больших магазинов лучше разбивать удаление на партии по 50-100 товаров, чтобы избежать тайм-аутов;
  • Используйте WP-CLI для запуска скриптов — это безопаснее и эффективнее;
  • Ограничьте права пользователей для удаления товаров, чтобы избежать случайных удалений;
  • Регулярно очищайте базу от неиспользуемых метаданных и ревизий с помощью плагинов вроде Clearfy Pro (https://wpshop.ru/plugins/clearfy).

Сравнительная таблица способов удаления избыточных товаров

МетодПлюсыМинусы
Удаление через админкуПросто, безопасно для новичковМедленно при большом количестве, не автоматизируется
Использование скрипта с wp_delete_post()Автоматизация, контроль, правильное удаление данныхТребует навыков, риск при ошибках
Прямое удаление из базы (SQL)Быстрое удаление, подходит для больших объёмовРиск повреждения базы, оставление мусора
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее