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

Диагностика проблемы с пустыми вариантами атрибутов

Пустые варианты атрибутов в WooCommerce — это варианты, которые созданы в админке, но не связаны ни с одним товаром. Они могут накапливаться после массового импорта или удаления товаров, вызывая путаницу в фильтрах и ухудшая UX. Для проверки проблемы выполните SQL-запрос в базе данных или используйте WP-CLI:

SELECT * FROM wp_woocommerce_termmeta
WHERE meta_key = 'product_attribute_is_empty' OR term_id NOT IN (
    SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE taxonomy LIKE 'pa_%'
);

Этот запрос покажет термины, которые не используются в таксономиях атрибутов. Также можно визуально проверить в WooCommerce > Товары > Атрибуты > Выберите атрибут > Управление вариантами — если там много вариантов, которые не связаны с товарами, значит, проблема есть.

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

1. Создание резервной копии базы данных

Перед любыми изменениями обязательно сделайте резервную копию базы данных, чтобы избежать потери данных.

2. Определение пустых вариантов

Пустые варианты — это термины в таксономиях атрибутов, которые не связаны ни с одним товаром. Следующий скрипт PHP удалит такие варианты:

<?php
function wp24_delete_empty_product_attribute_terms() {
    global $wpdb;
    // Получаем все таксономии атрибутов
    $taxonomies = $wpdb->get_col("SELECT DISTINCT taxonomy FROM {$wpdb->term_taxonomy} WHERE taxonomy LIKE 'pa_%'");

    foreach ($taxonomies as $taxonomy) {
        // Получаем все термины таксономии
        $terms = get_terms([
            'taxonomy' => $taxonomy,
            'hide_empty' => false,
        ]);

        foreach ($terms as $term) {
            // Проверяем, есть ли у термина связанные товары
            $count = $term->count;
            if ($count === 0) {
                wp_delete_term($term->term_id, $taxonomy);
                error_log("Удалён пустой вариант атрибута: {$term->name} (ID: {$term->term_id})");
            }
        }
    }
}

// Запуск функции в админке один раз
add_action('admin_init', function() {
    if (current_user_can('manage_woocommerce') && isset($_GET['wp24_delete_empty_terms']) && $_GET['wp24_delete_empty_terms'] == '1') {
        wp24_delete_empty_product_attribute_terms();
        wp_redirect(admin_url('edit.php?post_type=product'));
        exit;
    }
});
?>

Добавьте этот код в файл functions.php темы или в отдельный сниппет плагина. После добавления откройте в браузере URL https://ваш-сайт/wp-admin/edit.php?post_type=product&wp24_delete_empty_terms=1. Скрипт удалит все пустые варианты атрибутов.

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

После выполнения скрипта вернитесь в админку WooCommerce > Товары > Атрибуты > Управление вариантами. Пустые варианты должны исчезнуть. Также убедитесь, что фильтры на фронтенде работают корректно и не показывают пустых значений.

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

  • Нет прав для удаления терминов: Убедитесь, что текущий пользователь имеет права manage_woocommerce или manage_categories.
  • Удаление не происходит: Проверьте, что таксономии корректно выбираются через SQL. Иногда кастомные атрибуты могут иметь другие префиксы.
  • Пустые варианты возвращаются после импорта: Проверьте процесс импорта и очищайте пустые варианты регулярно, добавив вызов скрипта в CRON.
  • Удалены нужные варианты: Перед удалением проверьте $term->count — если равно 0, значит вариант не используется, но если есть сомнения, сделайте дополнительный бэкап.

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

Чтобы проверить, что пустые варианты действительно удалились, выполните в консоли WP-CLI:

wp term list pa_color --fields=term_id,name,count

Значение count у всех вариантов должно быть больше 0.

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

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

  • Не выполняйте удаление в рабочее время с высокой нагрузкой на сервер.
  • Добавьте ограничение выполнения скрипта по времени (например, удаляйте по 50 вариантов за запуск), если у вас очень большой каталог.
  • Регулярно очищайте базу от неиспользуемых терминов с помощью CRON или WP-Cron, чтобы избежать накопления мусора.
  • Для безопасности не оставляйте скрипт в functions.php постоянно — удаляйте после использования или ограничьте доступ.

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

МетодПлюсыМинусыРекомендации
Плагин (например, WP Clean Up)Простой, UI, без кодаМожет быть платным, лишние зависимостиДля новичков и быстрых решений
Ручной SQL-запросБыстрый, прямой доступ к даннымРиск ошибок, сложность для новичковДля опытных администраторов
Код PHP с WP-функциями (наш способ)Контролируемый, автоматизируемый, безопасныйНужно писать и тестировать кодОптимальный для разработчиков
Как удалить пустое метаполе в WooCommerce с помощью кода
15.05.2026
Как автоматически очищать отменённые и завершённые заказы в WooCommerce
26.06.2026
Удаление неиспользуемых таблиц в базе данных WordPress: практическое руководство
28.11.2025
Как запретить регистрацию в WordPress без плагинов
25.01.2026
Как отключить Gutenberg и вернуть классический редактор в WordPress
06.01.2026