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

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

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

Чтобы проверить наличие неиспользуемых вариантов, откройте Товары > Атрибуты в админке, выберите нужный атрибут и просмотрите список его терминов (вариантов). Обратите внимание на варианты, которые не связаны ни с одним товаром.

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

Стандартных инструментов для удаления неиспользуемых терминов атрибутов в WooCommerce нет. Придётся написать кастомный скрипт, который:

  • Получит все термины заданного атрибута.
  • Проверит, используются ли эти варианты в товарах.
  • Удалит неиспользуемые варианты.

Ниже пример PHP-кода, который можно выполнить через подключаемый плагин или в файле functions.php вашей темы (рекомендуется сначала создать резервную копию базы):

function wp24_delete_unused_attribute_terms($attribute_name) {
    if (empty($attribute_name)) {
        return;
    }

    // Получаем таксономию WooCommerce для атрибута
    $taxonomy = wc_attribute_taxonomy_name($attribute_name); // например, pa_color

    if (!taxonomy_exists($taxonomy)) {
        error_log("Таксономия атрибута не существует: $taxonomy");
        return;
    }

    // Получаем все термины атрибута
    $terms = get_terms(array(
        'taxonomy' => $taxonomy,
        'hide_empty' => false,
    ));

    if (is_wp_error($terms) || empty($terms)) {
        error_log("Термины не найдены для таксономии: $taxonomy");
        return;
    }

    foreach ($terms as $term) {
        // Проверяем, сколько товаров использует этот термин
        $count = $term->count;

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

// Пример вызова: удалить неиспользуемые варианты атрибута 'color'
add_action('init', function() {
    if (current_user_can('manage_woocommerce')) {
        wp24_delete_unused_attribute_terms('color');
    }
});

Обратите внимание, что color — это слаг атрибута без префикса pa_. Для других атрибутов замените на соответствующий слаг.

Как запустить скрипт безопасно

1. Добавьте код во временный плагин или в functions.php дочерней темы.
2. Обновите любую страницу в админке (лучше не фронтенд).
3. После успешного удаления удалите код, чтобы избежать повторных вызовов.

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

1. Зайдите в WooCommerce > Атрибуты и выберите атрибут с удалёнными вариантами.
2. Убедитесь, что неиспользуемые варианты исчезли из списка.
3. В админке товаров попробуйте создать или отредактировать товар с этим атрибутом — проверьте, что старых вариантов нет.
4. Для дополнительной проверки можно выполнить SQL-запрос в базе, например:

SELECT term_id, name, count FROM wp_terms 
JOIN wp_term_taxonomy ON wp_terms.term_id = wp_term_taxonomy.term_id
WHERE taxonomy = 'pa_color';
<

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

Частые ошибки и пути решения

  • Ошибка: "Таксономия не существует" — возможно, неверно указан слаг атрибута. Проверьте название в WooCommerce > Атрибуты.
  • Варианты не удаляются, хотя не используются — убедитесь, что поле count действительно равно 0. Иногда кэш или транзиенты мешают обновлению. Запустите очистку кэша WooCommerce и базы.
  • Удаление происходит повторно — скрипт запускается при каждом init. Убедитесь, что он удалён после выполнения.
  • Удалён нужный вариант — сначала сделайте бэкап базы, чтобы восстановить данные.

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

  • Всегда делайте резервную копию базы перед запуском любых массовых операций.
  • Используйте current_user_can('manage_woocommerce') для ограничения запуска кода только администраторам.
  • Для удаления вариантов большого количества атрибутов разделяйте операции на несколько запусков, чтобы избежать таймаутов.
  • Оптимизируйте таблицы базы данных после удаления терминов для уменьшения размера и повышения скорости.
  • Используйте WP-CLI для запуска подобных скриптов в командной строке — это безопаснее и быстрее.

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

МетодПлюсыМинусыПримечание
Удаление вручную через админкуПросто, не требует кодаДолго при большом количестве вариантов, легко пропуститьПодходит для малого магазина
Кастомный PHP-скрипт (как в статье)Автоматизация, можно запускать регулярноТребует навыков, риск удаления нужных данных без бэкапаРекомендуется для средних и крупных магазинов
Плагины оптимизации и очистки базыИнтерфейс, дополнительные функцииМожет удалять лишнее, нагрузка на сайтИспользовать с осторожностью, проверять настройки
Как отладить и решить проблемы с переадресацией в WordPress
06.11.2025
Как удалить пустое метаполе в WooCommerce с помощью кода
15.05.2026
Как запретить отображение версии WordPress для безопасности сайта
05.03.2026
Запрет на индексацию сайта WordPress через robots.txt и .htaccess: практические методы
28.01.2026
Как создать динамическую картинку из шорткода в WordPress с примером кода
01.02.2026