Массовое удаление и изменение атрибутов товаров в WooCommerce: практическое руководство

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

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

Как определить, какие атрибуты нужно менять или удалять

Для начала нужно понять, какие атрибуты есть и как они используются. Выполните следующий SQL-запрос в базе данных (через phpMyAdmin или WP CLI, сделайте резервную копию перед изменениями):

SELECT DISTINCT meta_key FROM wp_postmeta WHERE meta_key LIKE '\_product_attributes';

Атрибуты хранятся в сериализованном массиве метаполя _product_attributes у постов типа product. Чтобы получить список атрибутов:

SELECT meta_value FROM wp_postmeta WHERE meta_key = '_product_attributes' LIMIT 1;

Расшифруйте сериализованный массив с помощью PHP-функции unserialize(), чтобы понять структуру.

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

Ниже пример функции, которая удаляет заданный атрибут (по slug) у всех товаров:

function remove_product_attribute_mass($attribute_slug) {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'fields' => 'ids',
    ];
    $products = get_posts($args);

    foreach ($products as $product_id) {
        $attributes = get_post_meta($product_id, '_product_attributes', true);
        if (!is_array($attributes) || empty($attributes)) continue;

        if (isset($attributes[$attribute_slug])) {
            unset($attributes[$attribute_slug]);
            update_post_meta($product_id, '_product_attributes', $attributes);
        }
    }
}

Вызовите функцию, например:

remove_product_attribute_mass('color'); // удалит атрибут 'color' у всех товаров

Как массово изменить значение атрибута у товаров

Для изменения значений атрибутов в вариациях или у простых товаров нужно работать с метаполями вариаций и атрибутами. Пример замены значения атрибута 'color' с 'red' на 'blue' у простых товаров:

function replace_product_attribute_value($attribute_slug, $old_value, $new_value) {
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'fields' => 'ids',
    ];
    $products = get_posts($args);

    foreach ($products as $product_id) {
        $product = wc_get_product($product_id);
        if (!$product) continue;

        $attributes = $product->get_attributes();
        if (!isset($attributes[$attribute_slug])) continue;

        $attribute = $attributes[$attribute_slug];

        // Для пользовательских атрибутов
        if ($attribute->is_taxonomy()) continue; // Пропускаем таксономические атрибуты

        $options = $attribute->get_options();
        $changed = false;

        foreach ($options as &$option) {
            if ($option === $old_value) {
                $option = $new_value;
                $changed = true;
            }
        }

        if ($changed) {
            $attribute->set_options($options);
            $product->save();
        }
    }
}

Вызов функции:

replace_product_attribute_value('pa_color', 'red', 'blue');

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

  • Зайдите в админку WooCommerce > Товары.
  • Откройте несколько товаров, у которых должен был измениться атрибут.
  • Проверьте вкладку «Атрибуты» — удалённый атрибут должен отсутствовать, изменённый — иметь новое значение.
  • Для таксономических атрибутов проверьте наличие нужных терминов в списке.
  • На фронте проверьте фильтры и карточки товаров.

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

  • Не удаляется атрибут: возможно, указано неправильное имя атрибута (slug). Уточните точное имя через get_post_meta($product_id, '_product_attributes', true) или в админке.
  • Изменения не применяются к вариациям: вариации — отдельные посты типа product_variation. Для них нужно повторить процедуру, получая вариации через $product->get_children().
  • Проблемы с сериализацией: всегда используйте функции WordPress get_post_meta и update_post_meta для автоматического сериализования/десериализования.
  • Нагрузка на сервер: при большом количестве товаров разбивайте работу на батчи или запускайте в CLI, чтобы избежать таймаутов.

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

  • Перед массовыми изменениями сделайте полную резервную копию базы данных.
  • Ограничьте число товаров, обрабатываемых за один запрос, например, с помощью 'posts_per_page' => 50 и пагинации.
  • Используйте WP CLI для выполнения скриптов — это безопаснее и быстрее, чем запуск через веб-интерфейс.
  • Если атрибуты используются в вариациях, не забудьте синхронизировать изменения и там.
  • После массовых изменений запустите пересчёт кэша WooCommerce: wc_delete_product_transients().

Сравнение вариантов удаления атрибутов: плагин vs. код

МетодПлюсыМинусыКогда использовать
Плагин (например, Bulk Edit Products)Простота, готовый интерфейс, поддержкаМожет быть платным, нагрузка на сайт, ограниченная гибкостьЕсли нужно сделать разовую правку без кода
Код (PHP-функции)Полный контроль, автоматизация, интеграция в процессыТребует навыков разработки, риск ошибокДля регулярных массовых операций и кастомных сценариев
Как создать настраиваемую настройку темы WordPress в панели администратора
12.01.2026
Автоматическое удаление товаров WooCommerce при отсутствии на складе
26.04.2026
Как создать автоматический импорт постов в WordPress из внешнего источника
25.12.2025
Как добавить многоязычность в WordPress без плагинов
05.04.2026
Как удалить старые изображения в WordPress без плагинов
19.01.2026