Автоматическое удаление товаров с устаревшими атрибутами в WooCommerce

Проблема: устаревшие атрибуты в товарах WooCommerce

При большом каталоге WooCommerce со временем атрибуты товаров могут устаревать или становиться неактуальными, например, сезонные характеристики, цвета или размеры, которые больше не используются. Это приводит к ошибкам фильтрации, ухудшению UX и негативно влияет на SEO. Автоматическое удаление товаров с такими атрибутами поможет поддерживать каталог в актуальном состоянии без необходимости ручной проверки.

Диагностика: как выявить товары с устаревшими атрибутами

Для начала нужно точно определить, какие атрибуты считать устаревшими. Например, у вас есть атрибут season с терминами winter, summer и spring, а вы хотите удалить все товары, где установлен season=summer.

Чтобы проверить наличие таких товаров, используйте WP-CLI или SQL-запросы, либо код в functions.php для выборки:

function get_products_with_attribute( $taxonomy, $term_slug ) {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'tax_query' => [
            [
                'taxonomy' => $taxonomy,
                'field'    => 'slug',
                'terms'    => $term_slug,
            ],
        ],
        'fields' => 'ids',
    ];
    $query = new WP_Query( $args );
    return $query->posts;
}

// Пример вызова
$summer_products = get_products_with_attribute( 'pa_season', 'summer' );
error_log( print_r($summer_products, true) );

Замените pa_season на вашу таксономию атрибутов (префикс pa_ + slug атрибута).

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

Для удаления товаров с конкретным атрибутом используйте следующий PHP-код. Лучше запускать его однократно через отдельный плагин или подключать в консоли WP-CLI для безопасности.

function delete_products_by_attribute( $taxonomy, $term_slug ) {
    $product_ids = get_products_with_attribute( $taxonomy, $term_slug );
    if ( empty( $product_ids ) ) {
        error_log('Товары с атрибутом не найдены.');
        return;
    }
    foreach ( $product_ids as $product_id ) {
        wp_delete_post( $product_id, true ); // true для полного удаления без перемещения в корзину
        error_log('Удалён товар ID: ' . $product_id);
    }
}

// Вызов функции
add_action( 'init', function() {
    if ( current_user_can('administrator') && isset($_GET['delete_products']) && $_GET['delete_products'] === '1' ) {
        delete_products_by_attribute( 'pa_season', 'summer' );
    }
} );

Чтобы запустить удаление, войдите под администратором и откройте https://example.com/?delete_products=1. После выполнения скрипт удалит все товары с атрибутом "summer".

Проверка результата

  • Проверьте, что товары с нужным атрибутом удалены через админку WooCommerce (Товары).
  • Используйте код из блока диагностики, чтобы убедиться, что товаров с этим атрибутом больше нет.
  • Проверьте логи сервера на сообщения об удалении.

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

  • Неправильный префикс таксономии атрибутов. Атрибуты всегда имеют префикс pa_. Если указать только slug, товар не найдётся.
  • Запуск скрипта без прав администратора. Добавлена проверка current_user_can('administrator'), иначе скрипт не сработает.
  • Удаление без резервного копирования. Удалённые товары восстановить будет невозможно. Перед запуском сделайте бэкап базы.
  • Нагрузка на сервер при большом количестве товаров. Для крупных магазинов лучше удалять партиями с помощью крон-задачи или WP-CLI.

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

  • Никогда не запускайте массовые удаления на живом сайте без теста на локальной копии.
  • Используйте WP-CLI для больших магазинов: wp post delete $(wp post list --post_type=product --tax_query='taxonomy=pa_season,field=slug,terms=summer' --format=ids) --force.
  • Добавьте ограничение по времени и количеству удаляемых товаров за один запуск, чтобы избежать таймаутов и перегрузки.
  • После удаления товаров обновите транзиенты и очистите кеш WooCommerce и плагинов кеширования.

Сравнение вариантов автоматического удаления товаров

МетодПлюсыМинусы
PHP-скрипт в теме или плагинеГибкость, можно настроить под нуждыРиск ошибок, требует знаний PHP, может нагрузить сервер
WP-CLIБыстро, безопасно, подходит для больших магазиновНужен доступ к серверу и знание консоли
Плагины для массового удаленияУдобный UI, без кодаМогут не поддерживать фильтрацию по атрибутам, нагрузка
Как удалить редиректы в WordPress: полное практическое руководство
04.11.2025
Как изменить шаблон страницы товара в WooCommerce без поддержки темы
07.05.2026
Автоматический импорт постов из внешнего источника в WordPress
07.04.2026
Как удалить изображения без использования в WordPress
31.05.2026
Как создать уникальные слаги для пользовательских типов записей в WordPress
04.03.2026