wpcat.ru wordpress WPCat.ru

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

Проблема: пустые варианты и атрибуты в товарах WooCommerce

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

Стандартных средств WooCommerce для массового удаления таких пустых элементов нет, а плагины могут быть избыточными и влиять на производительность. Поэтому эффективное решение — автоматизировать эту задачу через кастомный код.

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

Для проверки пустых вариантов и атрибутов можно использовать следующий подход:

  • В админке откройте товар с вариациями и посмотрите, есть ли варианты без цены или без статуса "В наличии";
  • Для атрибутов — проверьте, есть ли атрибуты, которые не используются ни в одном варианте;
  • через запросы к базе можно выявить вариации с нулевым запасом или пустыми метаданными.

Для удобства диагностики приведём пример запроса для пустых вариаций с нулевым запасом:

SELECT p.ID, p.post_parent, pm.meta_value AS stock_quantity
FROM wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id AND pm.meta_key = '_stock'
WHERE p.post_type = 'product_variation'
AND (pm.meta_value IS NULL OR pm.meta_value = '0');

Если таких записей много — пора очищать.

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

1. Удаление пустых вариаций

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

function wpcat_remove_empty_variations() {
    $args = [
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'post_status'    => ['publish', 'private'],
        'meta_query'     => [
            [
                'key'     => '_stock',
                'value'   => '0',
                'compare' => '=',
                'type'    => 'NUMERIC',
            ],
        ],
    ];

    $variations = get_posts($args);

    foreach ($variations as $variation) {
        wp_delete_post($variation->ID, true); // Удаляем без возможности восстановления
    }
}
// Запускайте функцию вручную или через WP-CLI
// wpcat_remove_empty_variations();

Эта функция удалит все вариации с запасом 0. Если нужно учитывать другие критерии (например, отсутствие цены), добавьте соответствующие meta_query.

2. Удаление неиспользуемых атрибутов товаров

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

function wpcat_delete_unused_product_attributes() {
    global $wpdb;

    // Получаем все атрибуты (термины в таксономиях типа pa_*)
    $attribute_taxonomies = wc_get_attribute_taxonomies();

    foreach ( $attribute_taxonomies as $attribute ) {
        $taxonomy = wc_attribute_taxonomy_name( $attribute->attribute_name );

        // Получаем ID терминов атрибута
        $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 );
            }
        }
    }
}
// Запускайте функцию вручную или через WP-CLI
// wpcat_delete_unused_product_attributes();

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

  • Перейдите в админку WooCommerce → Товары → Вариации выбранного товара. Пустые варианты должны исчезнуть.
  • В разделе Атрибуты в WooCommerce или через «Товары → Атрибуты» проверьте, что удалились неиспользуемые термины.
  • Можно повторно запустить SQL-запрос из блока диагностики — пустых вариаций и атрибутов с нулевым использованием быть не должно.

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

  • Удаление вариаций не срабатывает: Проверьте, что функция вызывается. Код лишь описывает логику, для автоматизации вызов нужно добавить самостоятельно, например, через WP-CLI или cron.
  • Удаляются нужные варианты: Проверьте условия в meta_query. Например, запас может быть 0, но вариант доступен по предзаказу — учитывайте бизнес-логику.
  • Отсутствие прав на удаление: Функция wp_delete_post требует прав администратора. Запускайте код от имени администратора.
  • Ошибка при удалении терминов: Проверьте, что таксономия существует и термин не используется в других местах.

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

  • Запускайте скрипты удаления вручную или через WP-CLI, чтобы избежать нагрузки на сайт в пиковые часы.
  • Перед массовым удалением сделайте резервную копию базы данных.
  • Делайте удаление партиями, если товаров и вариаций много, чтобы избежать таймаута.
  • Для ускорения работы запросов используйте индексы по метаданным в базе MySQL.

Сравнение способов очистки пустых вариаций и атрибутов

МетодПлюсыМинусыКомпромисс
Ручное удаление через админку Простота, нет риска автокода Много времени, ошибка человека Для единичных случаев
Плагины (например, WP Clean Up) Автоматизация, удобный интерфейс Дополнительная нагрузка, возможные конфликты Для средних сайтов
Кастомный код (описанный выше) Контроль, легковесность, безопасность Требует технических знаний Оптимально для опытных разработчиков
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее