WooCommerce: автоматическое установление родительской категории при импорте товаров

|

В чем проблема с импортом категорий в WooCommerce

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

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

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

Пошаговое решение: автоматическая установка родительской категории при импорте

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

Пример кода, который можно добавить в файл functions.php вашей темы или в кастомный плагин:

add_action('woocommerce_product_import_inserted_product_object', 'set_parent_category_automatically', 10, 2); 
function set_parent_category_automatically($product, $data) {
    if (empty($data['categories']) || !is_array($data['categories'])) {
        return;
    }
    foreach ($data['categories'] as $cat_name) {
        // Разбираем иерархию категорий через разделитель ' > '
        $categories = array_map('trim', explode(' > ', $cat_name));
        if (count($categories) < 2) {
            continue; // Нет иерархии
        }
        $parent_term = null;
        foreach ($categories as $cat) {
            $term = get_term_by('name', $cat, 'product_cat');
            if (!$term) {
                // Создаем термин, если не существует
                $term_args = array('slug' => sanitize_title($cat));
                $term = wp_insert_term($cat, 'product_cat', array('parent' => $parent_term ? $parent_term->term_id : 0));
                if (is_wp_error($term)) {
                    break;
                }
                $term = get_term($term['term_id'], 'product_cat');
            }
            $parent_term = $term;
        }
        // Привязываем товар к последнему термину (дочернему)
        if ($parent_term) {
            wp_set_object_terms($product->get_id(), array($parent_term->term_id), 'product_cat', true);
        }
    }
}

Объяснение:

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

Чтобы убедиться, что решение работает:

  1. Импортируйте файл с товарами, где категории указаны с иерархией через " > ".
  2. Перейдите в «Товары» -> «Категории» и проверьте, что во всех дочерних категориях есть правильные родители.
  3. Откройте карточку товара — в мета-боксе категорий должны быть установлены и дочерние, и родительские категории.
  4. Проверьте на фронтенде, что фильтры и навигация по категориям работают как ожидается.

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

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

Сравнение способов установки иерархии категорий при импорте

МетодПреимуществаНедостатки
Ручное создание категорий перед импортомПолный контроль над иерархиейЗатратно по времени, не подходит для массового импорта
Использование плагинов импорта с поддержкой иерархий (WP All Import и др.)Удобство, визуальные настройкиПлатные, зависят от корректности данных
Кастомный код с хуками WooCommerce (описанный в статье)Гибкость, автоматизация, бесплатныйТребует навыков PHP, настройка под собственный формат данных
WooCommerce: как правильно настроить иерархию категорий и проблемы с производительностью
17.04.2026
Как реализовать иерархию с нюансами в WordPress с помощью мета-полей
15.01.2026
Как создать иерархию динамических блоков на странице WordPress
25.02.2026
Как создать иерархию пользователей с поддержкой REST API в WordPress
05.04.2026
Создать пирамиду категорий в WordPress с помощью кода
21.01.2026
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙