Как вывести в виджете woocomerce активные подкатегории?

Ссылка скопирована
1 ответ

Добрый день! задача в виджете категорий woocomerce выводить категории и подкатегории, но подкатегории надо показывать только в той категории, в которой находится пользователь.
Наглядно:
*Пользователь находится в категории 1.
-Категория 1
--Подкатегория 1
--Подкатегория 2
-Категория 2
-Категория 3
_________

*Пользователь находится в категории 2.
-Категория 1
-Категория 2
--Подкатегория 1
--Подкатегория 2
-Категория 3
_____________

Подскажите пожалуйста, как сделать?

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Игорь Волков Ответ

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

Логика решения простая:

  • получить текущий объект термина на странице категории товара;
  • определить активного родителя: если пользователь находится в родительской категории, активен её ID, если в подкатегории, активен ID её parent;
  • получить все категории верхнего уровня таксономии product_cat;
  • вывести эти категории списком;
  • для каждой родительской категории проверить, совпадает ли она с активным родителем;
  • дочерние категории запрашивать и выводить только для совпавшего родителя;
  • для текущей категории и активной ветки добавить CSS-классы, чтобы их можно было визуально выделить.

Такой код можно разместить в дочерней теме, если это часть оформления сайдбара, или в небольшом site-specific плагине, если меню должно жить независимо от темы. Вывод подключается в sidebar-шаблоне, через hook темы или через шорткод в виджете, если тема позволяет вставлять шорткоды в нужной области.

Важно не путать активную категорию и активного родителя. Когда пользователь находится в категории 1, активным родителем будет сама категория 1. Когда пользователь находится в подкатегории внутри категории 1, активным родителем всё равно должна оставаться категория 1, иначе меню свернётся и пользователь потеряет контекст. При этом саму текущую подкатегорию можно дополнительно отметить отдельным классом, чтобы подсветить выбранный пункт.

Параметр hide_empty выбирайте по задаче. Для магазина чаще ставят скрытие пустых категорий, чтобы не вести пользователя в разделы без товаров. Но если каталог только наполняется или категории нужны как постоянная структура, можно показывать и пустые. Сортировку лучше явно задать по menu_order, name или другому принятому в проекте правилу, чтобы порядок в меню не менялся неожиданно.

Если категорий много, не делайте тяжёлые запросы без необходимости на каждом пункте. Сначала можно реализовать простой вариант и проверить поведение, а затем оптимизировать: кэшировать дерево категорий, заранее группировать дочерние элементы по parent или использовать объектный кэш. Но преждевременно усложнять не стоит: для обычного каталога достаточно аккуратной функции с get_terms, get_term_link и правильным определением текущей ветки.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно