WPTour

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

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

При массовом импорте товаров в WooCommerce через CSV или сторонние плагины часто возникают ситуации, когда в базе остаются «мертвые» атрибуты, которые не используются ни в одном товаре. Они занимают место в базе, замедляют админку и мешают точной фильтрации товаров.

Проанализируйте проблему так:

  • Перейдите в Товары → Атрибуты в админке WooCommerce.
  • Проверьте список атрибутов, которые не связаны ни с одним товаром.
  • Выполните запрос к базе данных для проверки использования атрибутов:
SELECT attribute_id, COUNT(*) as usage_count FROM wp_woocommerce_termmeta JOIN wp_term_relationships ON wp_woocommerce_termmeta.term_id = wp_term_relationships.term_taxonomy_id WHERE meta_key LIKE 'attribute_%' GROUP BY attribute_id;

Если usage_count = 0, атрибут можно считать неиспользуемым.

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

1. Создаем функцию очистки неиспользуемых атрибутов

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

function wc_remove_unused_product_attributes() {
    global $wpdb;

    // Получаем все атрибуты
    $attributes = wc_get_attribute_taxonomies();

    foreach ( $attributes as $attribute ) {
        $taxonomy = wc_attribute_taxonomy_name( $attribute->attribute_name );

        // Проверяем, есть ли термины, связанные с товарами
        $count = $wpdb->get_var( $wpdb->prepare(
            "SELECT COUNT(tr.object_id) FROM {$wpdb->term_relationships} tr
             INNER JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
             WHERE tt.taxonomy = %s",
            $taxonomy
        ) );

        if ( $count == 0 ) {
            // Удаляем атрибут из базы
            wc_delete_attribute( $attribute->attribute_id );
        }
    }
}

2. Запускаем функцию после массового импорта

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

wp eval 'wc_remove_unused_product_attributes();'

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

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

  • Зайдите в Товары → Атрибуты и убедитесь, что список атрибутов очищен от неактивных.
  • Выполните SQL-запрос из раздела диагностики — он должен вернуть лишь атрибуты с товарами.
  • Проверьте, что фильтры на сайте работают корректно без пустых опций.

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

  • Удаление атрибутов, которые используются в скрытых товарах: убедитесь, что проверка учитывает только видимые товары, иначе можно случайно удалить нужные атрибуты.
    Исправление: добавьте условие на статус товара в SQL-запрос.
  • Функция не запускается после импорта: проверьте, что вызов функции действительно происходит после завершения импорта.
    Исправление: используйте хуки плагина импорта или WP-CLI для ручного запуска.
  • Потеря пользовательских настроек атрибутов: при удалении атрибутов убедитесь, что не удаляются системные или важные пользовательские атрибуты.
    Исправление: фильтруйте по названию или ID атрибутов, не удаляйте важные.

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

  • Перед массовым удалением создавайте резервные копии базы данных.
  • Оптимизируйте запросы, чтобы не блокировать базу при большом количестве товаров.
  • Для больших магазинов запускайте очистку в фоне через WP-Cron с разбивкой по партиям.
  • Используйте встроенную функцию wc_delete_attribute() для корректного удаления, чтобы избежать повреждений данных.

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

МетодПлюсыМинусы
Ручное удаление в админкеПросто, не требует кодаТрудоемко при большом количестве, риск забыть
Автоматизация через кастомный кодПолный контроль, можно запускать по расписаниюТребуется навыки разработки
Использование плагинов оптимизацииУдобно, иногда включено в функции очисткиМожет удалять лишнее, не всегда гибко
×
до 3225₽

Продавай темы и плагины WordPress!

Лови с каждой продажи

Начать ⋙