Диагностика проблемы с вариативными товарами в WooCommerce
В магазине на WooCommerce со временем накапливаются вариативы товаров, которые перестают использоваться: устаревшие варианты цвета, размера и других атрибутов. Это приводит к путанице в админке, увеличению базы данных и замедлению работы сайта.
Типичные признаки проблемы:
- В списке вариативов товара отображаются опции, которые не актуальны;
- При создании вариаций предлагаются устаревшие атрибуты;
- В базе данных остаются записи term_taxonomy и termmeta для неиспользуемых вариаций;
- Производительность админки падает из-за большого количества вариантов.
Пошаговое решение: автоматическое удаление неиспользуемых вариативов
Шаг 1. Выявление неиспользуемых вариативов
Неиспользуемые вариативы — это атрибуты, которые не связаны ни с одним опубликованным товаром. Для их поиска удобно использовать запрос к базе данных, но для автоматизации применим PHP-код с использованием WP_Query и WooCommerce функций.
Шаг 2. Код для удаления неиспользуемых термов атрибутов
Добавьте в functions.php вашей темы или в отдельный плагин следующий код. Он проверит все термы атрибутов и удалит те, которые не используются в товарах:
function wc_remove_unused_product_variations() {
$attribute_taxonomies = wc_get_attribute_taxonomies();
if ( ! $attribute_taxonomies ) {
return;
}
foreach ( $attribute_taxonomies as $attribute ) {
$taxonomy = wc_attribute_taxonomy_name( $attribute->attribute_name );
$terms = get_terms( array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
) );
foreach ( $terms as $term ) {
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => 1,
'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $term->slug,
),
),
);
$query = new WP_Query( $args );
if ( ! $query->have_posts() ) {
wp_delete_term( $term->term_id, $taxonomy );
}
wp_reset_postdata();
}
}
}
add_action( 'init', 'wc_remove_unused_product_variations' );Этот код при каждом запуске инициализации WordPress проверяет все атрибуты и удаляет термы без привязанных товаров.
Шаг 3. Запуск и проверка
Для однократного запуска кода рекомендуется временно добавить вызов функции напрямую и затем его удалить, чтобы избежать постоянных проверок:
add_action('admin_init', function() {
wc_remove_unused_product_variations();
});После успешного запуска код можно убрать или закомментировать.
Проверка результата после внедрения
- В админке WooCommerce на странице редактирования товаров проверьте список вариативов — устаревшие должны исчезнуть.
- В разделе «Атрибуты» в WooCommerce убедитесь, что неиспользуемые термы удалены.
- В базе данных таблицы
wp_termsиwp_term_taxonomyпроверьте отсутствие удалённых терминов. - Производительность страницы редактирования товаров должна улучшиться.
Частые ошибки и как их исправить
- Удаление активных термов: если терм используется в опубликованном товаре, он не удалится. Если удаляется, проверьте кэш и правильность условий запроса.
- Код не запускается: убедитесь, что файл functions.php загружается, нет синтаксических ошибок.
- Проблемы с кэшированием: если вы используете плагин кэширования, очистите кэш после удаления вариативов.
- Удаляются нужные вариативы: сделайте бэкап базы перед запуском, добавьте логирование удалённых терминов для контроля.
Практические советы по безопасности и производительности
- Запускайте удаление неиспользуемых вариативов на тестовой копии сайта перед продакшеном.
- Добавьте возможность запуска кода вручную через WP-CLI или админку для контроля.
- Используйте транзиенты или расписание WP-Cron для периодической очистки (например, раз в неделю).
- Оптимизируйте базу данных после удаления с помощью плагинов типа Clearfy для удаления мусора и улучшения быстродействия.
Сравнение способов удаления неиспользуемых вариативов
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Ручное удаление в админке | Просто, не требует кода | Долго на больших магазинах, риск пропустить | Маленькие магазины |
| Автоматический PHP-скрипт (код) | Полная автоматизация, экономия времени | Требует навыков, риск ошибок | Средние и крупные магазины |
| Плагины оптимизации (Clearfy и др.) | Удобно, много функций | Зависимость от стороннего кода | Для комплексной оптимизации |