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

|

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

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

Как понять, что проблема именно в этом:

Как автоматически установить родительскую категорию при изменении товара в WooCommerce

Реализуем функцию, которая при сохранении товара проверит, есть ли у товара дочерние категории, и если есть, автоматически добавит соответствующие родительские категории.

Пошаговое решение

  1. Подключаем хук save_post_product — срабатывает при сохранении товара.
  2. Получаем все категории товара.
  3. Для каждой категории проверяем наличие родительской категории.
  4. Добавляем родительские категории к товару, если они ещё не установлены.
  5. Обновляем категории товара.
add_action('save_post_product', 'auto_set_parent_categories', 20, 3);
function auto_set_parent_categories($post_id, $post, $update) {
    // Проверяем, что это не автосохранение
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    // Проверяем права пользователя
    if (!current_user_can('edit_product', $post_id)) {
        return;
    }
    // Получаем текущие категории товара
    $terms = wp_get_post_terms($post_id, 'product_cat', array('fields' => 'ids'));
    if (empty($terms) || is_wp_error($terms)) {
        return;
    }
    $all_cats = $terms;
    foreach ($terms as $term_id) {
        $term = get_term($term_id, 'product_cat');
        if ($term && $term->parent && !in_array($term->parent, $all_cats)) {
            $all_cats[] = $term->parent;
        }
    }
    // Если родительские категории добавились, обновляем таксономию
    if (count($all_cats) > count($terms)) {
        wp_set_post_terms($post_id, $all_cats, 'product_cat');
    }
}

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

Для проверки выполните следующие действия:

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

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

$ancestors = get_ancestors($term_id, 'product_cat');
$all_cats = array_unique(array_merge($all_cats, $ancestors));

Сравнение решений для установки родительских категорий

МетодПлюсыМинусыПрименимость
Хук save_post_product с wp_set_post_termsАвтоматизация, работает при редактировании товараМожет замедлять сохранение при большом объемеМалые и средние магазины
Отдельный скрипт на WP-CLI для массового обновленияБыстрая обработка больших объемовНе автоматизировано, требует запуска вручнуюКрупные магазины, импорт
Использование плагинов для управления категориямиПростота установки, GUIМожет быть избыточно, нагрузка на сайтНовички, небольшие проекты
WooCommerce: автоматическое удаление пустых категорий при импорте товаров
01.07.2026
Как удалить пустое разделение в иерархии WordPress: практическое руководство
11.04.2026
WooCommerce: как установить родительскую категорию при импорте товаров CSV
17.06.2026
WooCommerce: как исключить категории товаров из каталога для определённых ролей пользователей
14.06.2026
WooCommerce: автоматическое установление родительской категории при импорте товаров
14.05.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше