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

|

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

Если при создании или импорте товаров в WooCommerce у товаров неправильно присваиваются родительские категории, это приводит к ошибкам в фильтрации, навигации и отображении иерархии категорий. Часто проблема проявляется так:

Для диагностики проверьте следующие моменты:

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

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

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

add_action('save_post_product', 'set_parent_categories_for_product', 20, 3);
function set_parent_categories_for_product($post_id, $post, $update) {
    if (wp_is_post_revision($post_id)) {
        return;
    }
    $terms = wp_get_post_terms($post_id, 'product_cat');
    $parent_ids = [];
    foreach ($terms as $term) {
        if ($term->parent) {
            $parent_ids[] = $term->parent;
        }
    }
    if (!empty($parent_ids)) {
        // Получаем текущие категории, добавляем родительские
        $all_terms = array_unique(array_merge(wp_list_pluck($terms, 'term_id'), $parent_ids));
        // Обновляем категории товара
        wp_set_post_terms($post_id, $all_terms, 'product_cat');
    }
}

Этот код автоматически добавляет родительские категории для каждого товара при сохранении, если они не были установлены.

Как проверить, что решение сработало

Исправление ошибки при массовом импорте товаров через WP All Import

Если используете плагины для импорта, например, WP All Import, убедитесь, что в настройках импорта вы указываете не только дочерние категории, но и их родителей. Альтернативно, можно добавить PHP-сниппет в функции импорта:

function add_parent_categories_to_imported_product($post_id) {
    $terms = wp_get_post_terms($post_id, 'product_cat');
    $parent_ids = [];
    foreach ($terms as $term) {
        if ($term->parent) {
            $parent_ids[] = $term->parent;
        }
    }
    if (!empty($parent_ids)) {
        $all_terms = array_unique(array_merge(wp_list_pluck($terms, 'term_id'), $parent_ids));
        wp_set_post_terms($post_id, $all_terms, 'product_cat');
    }
}
add_action('pmxi_saved_post', 'add_parent_categories_to_imported_product', 10, 1);

Этот код сработает после импорта каждого товара и дополнит категории родительскими.

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

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

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

Сравнение вариантов решения

МетодПреимуществаНедостатки
Код на хуке save_post_productАвтоматическое добавление родительских категорий при сохранении, простота внедренияСрабатывает только при сохранении товара, не при импорте без сохранения
Код на хуке pmxi_saved_post (импорт WP All Import)Обработка сразу после импорта, подходит для массовых загрузокЗависит от плагина импорта, требует отдельной настройки
Ручное указание категорий при создании/импортеПолный контроль над иерархией категорийМного ручной работы, риск ошибок
WooCommerce: как исправить проблему с пустой родительской категорией после импорта товаров
11.05.2026
Как создать динамическую иерархию постов в WordPress: практическое руководство
19.12.2025
Как создать динамическую иерархию таксономий с поддержкой REST API в WordPress
18.03.2026
Динамическая иерархия пользователей WordPress с поддержкой REST API
22.03.2026
Как создать иерархию таксономий с поддержкой AJAX в WordPress
01.01.2026
×
Оптимизируй свой сайт!

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

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