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

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

Пустые варианты атрибутов — частая проблема в WooCommerce, возникающая при массовом импорте товаров, ручном добавлении или некорректном обновлении атрибутов. Они создают путаницу в фильтрах, усложняют выбор покупателю и нагружают базу данных. Чтобы понять, есть ли пустые варианты на вашем сайте, выполните SQL-запрос к базе данных:

SELECT * FROM wp_woocommerce_attribute_taxonomies;

Или проверьте наличие терминов без связанного мета-значения:

SELECT t.term_id, t.name FROM wp_terms t
JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy LIKE 'pa_%' AND t.name = '';

Пустые варианты обычно имеют пустое название или не связаны с товарами.

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

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

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

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

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

        foreach ( $terms as $term ) {
            if ( empty(trim($term->name)) ) {
                wp_delete_term( $term->term_id, $taxonomy );
            }
        }
    }
}

// Запускаем функцию один раз через админку
add_action( 'admin_init', function() {
    if ( current_user_can('manage_options') && isset($_GET['wp24_delete_empty_terms']) ) {
        wp24_delete_empty_product_attribute_terms();
        wp_redirect( remove_query_arg('wp24_delete_empty_terms') );
        exit;
    }
});

Чтобы запустить очистку, добавьте в адресную строку админ-панели ?wp24_delete_empty_terms=1 и обновите страницу.

2. Проверка и удаление терминов с отсутствующими связями с товарами

Иногда вариант существует, но не связан ни с одним товаром, что создает "пустоту" в списках. Их можно удалить так:

function wp24_delete_unused_attribute_terms() {
    global $wpdb;
    $taxonomies = $wpdb->get_col("SELECT taxonomy FROM {$wpdb->term_taxonomy} WHERE taxonomy LIKE 'pa_%'");

    foreach ( $taxonomies as $taxonomy ) {
        $terms = get_terms( array(
            'taxonomy' => $taxonomy,
            'hide_empty' => false,
        ) );

        foreach ( $terms as $term ) {
            $count = $term->count; // Кол-во связанных объектов
            if ( $count == 0 ) {
                wp_delete_term( $term->term_id, $taxonomy );
            }
        }
    }
}

Добавьте вызов этой функции аналогично первой.

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

После запуска функций очистки:

  • Перейдите в WooCommerce > Продукты > Атрибуты и откройте список терминов каждого атрибута — пустых вариантов не должно быть.
  • Проверьте фильтры на страницах каталога — пустые варианты не должны отображаться.
  • Для контроля можно выполнить SQL-запрос:
SELECT t.term_id, t.name FROM wp_terms t
JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy LIKE 'pa_%' AND (t.name = '' OR tt.count = 0);

Если запрос не возвращает результатов — задача решена.

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

  • Удаление терминов без проверки прав администратора. Функция должна запускаться только с правами администратора, иначе можно случайно удалить нужные данные.
  • Отсутствие бэкапа базы данных. Перед массовым удалением всегда делайте резервную копию, чтобы избежать потери данных.
  • Неправильное использование параметра name__like. Этот парамет не фильтрует строго пустые названия — лучше проверять trim($term->name) в коде.
  • Игнорирование терминов с нулевым count, которые могут использоваться в кастомном функционале. Проверьте, действительно ли термин не используется.

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

  • Запускайте очистку вручную через безопасный вызов ?wp24_delete_empty_terms=1, а не на каждом заходе в админку.
  • Добавьте транзиенты или опцию для фиксации последнего запуска, чтобы случайно не повторять очистку слишком часто.
  • Перед массовым удалением используйте WP-CLI, если есть доступ к серверу, например:
wp term list pa_color --field=term_id --format=csv | xargs -I % wp term delete pa_color % --force

Но только после фильтрации пустых или неиспользуемых терминов.

Таблица сравнения методов удаления пустых атрибутов WooCommerce

МетодПреимуществаНедостатки
Кодовые функции в functions.phpКонтроль, нет лишних плагинов, быстроТребует знаний, риск ошибок без бэкапа
SQL-запросы напрямую в базеМоментальное удаление, гибкостьВысокий риск, требует доступа к базе
Плагины для очистки атрибутовПростота использования, UIНагрузка на сайт, лишний код
Как создать уникальный плагин для оптимизации базы данных WordPress
09.04.2026
Автоматическое удаление просмотренных заказов в WooCommerce с помощью PHP-кода
19.06.2026
Как автоматически удалять пустые категории в WordPress с помощью кода
29.03.2026
Как автоматически очищать отменённые и завершённые заказы в WooCommerce
26.06.2026
Как добавить уникальные поля в форму регистрации WordPress с проверкой уникальности
24.02.2026