wpmoney.ru wordpress WP Money

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

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

В WooCommerce часто возникает необходимость удалить сразу группу товаров, обладающих определённым атрибутом. Например, товары с атрибутом цвета "Красный" или размером "XL". Это важно при обновлении ассортимента, очистке каталога или исправлении ошибок импорта. Ручное удаление в админке неудобно и рискованно, особенно если товаров много.

Как определить товары с нужным атрибутом

Атрибуты в WooCommerce хранятся как таксономии с префиксом pa_. Например, атрибут "color" представлен таксономией pa_color. Значения атрибута — термины этой таксономии.

Чтобы получить ID товаров с атрибутом, используйте WP_Query с параметром таксономии:

$args = [
    'post_type' => 'product',
    'posts_per_page' => -1,
    'tax_query' => [
        [
            'taxonomy' => 'pa_color',
            'field' => 'slug',
            'terms' => 'red', // слаг значения атрибута
        ],
    ],
    'fields' => 'ids',
];
$query = new WP_Query($args);
$product_ids = $query->posts;

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

Пример функции для удаления всех товаров с атрибутом "color" = "red". Код можно добавить в файл functions.php темы или в отдельный плагин. Запускать один раз, затем удалять или комментировать.

function delete_products_by_attribute($taxonomy, $term_slug) {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'tax_query' => [
            [
                'taxonomy' => $taxonomy,
                'field' => 'slug',
                'terms' => $term_slug,
            ],
        ],
        'fields' => 'ids',
        'post_status' => 'publish',
    ];

    $query = new WP_Query($args);
    if (empty($query->posts)) {
        error_log('Товары с атрибутом не найдены.');
        return;
    }

    foreach ($query->posts as $product_id) {
        wp_delete_post($product_id, true); // true — безвозвратно
    }
    error_log('Удалено товаров: ' . count($query->posts));
}

// Использование:
delete_products_by_attribute('pa_color', 'red');

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

  • В админке WooCommerce проверьте каталог товаров — товары с указанным атрибутом должны исчезнуть.
  • В базе данных таблице wp_posts записи с типом product и удалённые ID должны отсутствовать.
  • В логах сервера или debug.log должна появиться запись об удалении товаров.
  • Можно повторно запустить WP_Query с теми же параметрами — он должен вернуть пустой массив.

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

  • Пустой результат WP_Query: проверьте правильность таксономии и слага значения атрибута. Атрибуты всегда с префиксом pa_, а значения — в нижнем регистре и без пробелов.
  • Товары не удаляются: убедитесь, что функция wp_delete_post вызывается с параметром $force_delete = true для безвозвратного удаления.
  • Удаление не происходит из-за кеширования: очистите кеш плагина (если есть) и кеш объектного кеширования WordPress.
  • Удаление запускается несколько раз: ограничьте вызов функции, например, запускать только по определённому условию или через админский крон.

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

  • Перед удалением обязательно сделайте резервную копию базы данных.
  • Для большого количества товаров делайте удаление пакетами (например, по 50 товаров), чтобы избежать превышения лимита времени выполнения скрипта.
  • Запуск кода лучше делать в консоли WP-CLI или через REST API с авторизацией администратора.
  • Не оставляйте такой код в продакшен-среде без контроля.

Альтернативы: плагин, код и компромиссы

ВариантПлюсыМинусы
Плагин массового удаления товаров по атрибутам (например, "Bulk Delete") Удобный UI, не требует кода Зависимость от сторонних решений, может не покрывать все сценарии
Код (как описано в статье) Максимальный контроль, автоматизация, отсутствие лишних плагинов Требует навыков, может вызвать баги при ошибках
Удаление вручную через фильтрацию товаров в админке Просто для малого количества товаров Неэффективно и долго при большом каталоге
×

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

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

пишет статьи

готовит SEO

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

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