Как вывести в виджете woocomerce активные подкатегории?
Добрый день! задача в виджете категорий woocomerce выводить категории и подкатегории, но подкатегории надо показывать только в той категории, в которой находится пользователь.
Наглядно:
*Пользователь находится в категории 1.
-Категория 1
--Подкатегория 1
--Подкатегория 2
-Категория 2
-Категория 3
_________
*Пользователь находится в категории 2.
-Категория 1
-Категория 2
--Подкатегория 1
--Подкатегория 2
-Категория 3
_____________
Подскажите пожалуйста, как сделать?
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для такой схемы стандартного вывода категорий WooCommerce часто недостаточно. Вам нужно не просто показать дерево категорий, а изменить поведение дерева в зависимости от текущей страницы: родительские категории видны всегда, а дочерние категории показываются только у активного родителя. Это лучше делать отдельной функцией вывода меню категорий, а не правкой ядра WooCommerce.
Логика решения простая:
Такой код можно разместить в дочерней теме, если это часть оформления сайдбара, или в небольшом site-specific плагине, если меню должно жить независимо от темы. Вывод подключается в sidebar-шаблоне, через hook темы или через шорткод в виджете, если тема позволяет вставлять шорткоды в нужной области.
Важно не путать активную категорию и активного родителя. Когда пользователь находится в категории 1, активным родителем будет сама категория 1. Когда пользователь находится в подкатегории внутри категории 1, активным родителем всё равно должна оставаться категория 1, иначе меню свернётся и пользователь потеряет контекст. При этом саму текущую подкатегорию можно дополнительно отметить отдельным классом, чтобы подсветить выбранный пункт.
Параметр hide_empty выбирайте по задаче. Для магазина чаще ставят скрытие пустых категорий, чтобы не вести пользователя в разделы без товаров. Но если каталог только наполняется или категории нужны как постоянная структура, можно показывать и пустые. Сортировку лучше явно задать по menu_order, name или другому принятому в проекте правилу, чтобы порядок в меню не менялся неожиданно.
Если категорий много, не делайте тяжёлые запросы без необходимости на каждом пункте. Сначала можно реализовать простой вариант и проверить поведение, а затем оптимизировать: кэшировать дерево категорий, заранее группировать дочерние элементы по parent или использовать объектный кэш. Но преждевременно усложнять не стоит: для обычного каталога достаточно аккуратной функции с get_terms, get_term_link и правильным определением текущей ветки.