WooCommerce: исправляем пустую родительскую категорию после импорта товаров

|

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

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

Основные признаки проблемы:

Как проверить проблему

Откройте импортированный товар в админке WordPress и проверьте, что в блоке категорий выбран только дочерний термин. Затем проверьте структуру категорий в разделе Товары → Категории. Если родительская категория есть, но не присвоена товару, значит импортировались только дочерние категории.

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

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

1. Добавление PHP-кода в functions.php или отдельный плагин

add_action('save_post_product', 'add_parent_categories_automatically', 20, 1);function add_parent_categories_automatically($post_id) {    if (wp_is_post_revision($post_id) || wp_is_post_autosave($post_id)) {        return;    }    $terms = wp_get_post_terms($post_id, 'product_cat');    if (empty($terms) || is_wp_error($terms)) {        return;    }    $all_cats = array();    foreach ($terms as $term) {        $all_cats[] = $term->term_id;        $parent_id = $term->parent;        while ($parent_id != 0) {            $all_cats[] = $parent_id;            $parent_term = get_term($parent_id, 'product_cat');            if (is_wp_error($parent_term) || !$parent_term) {                break;            }            $parent_id = $parent_term->parent;        }    }    $all_cats = array_unique($all_cats);    wp_set_post_terms($post_id, $all_cats, 'product_cat');}

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

2. Применение к уже импортированным товарам

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

$args = [    'post_type' => 'product',    'posts_per_page' => -1,    'post_status' => 'publish',];$products = get_posts($args);foreach ($products as $product) {    add_parent_categories_automatically($product->ID);}

Запустите этот код через админский PHP-редактор или временно в functions.php, затем удалите.

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

После реализации решения:

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

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

Сравнение методов решения проблемы

МетодПлюсыМинусыПрименимость
Ручное добавление категорий в админкеПросто, не требует кодаНевозможно для большого количества товаровМалые сайты
Автоматическое добавление через хук save_postАвтоматизация, работает при сохраненииТребуется запуск для уже импортированных товаровСредние и большие сайты
Модификация процесса импорта (плагины)Полный контроль при импортеЗависимость от плагина, сложность настройкиДля новых импортов
WooCommerce: ограничение доступа к категориям товаров по ролям пользователей
05.06.2026
WooCommerce: решение проблемы с отображением иерархии категорий при фильтрации
27.04.2026
Как создать иерархию пользователей по географии в WordPress с примерами
08.04.2026
WooCommerce: как настроить автоматическое создание иерархии атрибутов
09.06.2026
Как создать и использовать иерархию пользователей в WordPress для управления доступом
15.12.2025
×
Оптимизируй свой сайт!

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

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