Отображение подкатегорий на боковой панели при выборе родительской категории

#php #wordpress

#php #wordpress

Вопрос:

Чего я пытаюсь достичь в WP 3.1.x с помощью wp_nav_menu функции, так это иметь такое меню, как:

 -- Category 1
-- Category 2
-- Category 3
-- Category 4
-- Category 5
-- Category 6
  

Но когда вы переходите к «Категории 2», она отображается как:

 -- Category 1
-- Category 2
  -- Sub Category 1
  -- Sub Category 2
  -- Sub Category 3
-- Category 3
-- Category 4
-- Category 5
-- Category 6
  

PS. Я не ищу функциональность CSS hide / show, которая может быть легко достигнута.

PPS. Возможно ли решение для этого расширения Walker_Nav_Menu класса?

Комментарии:

1. Если вы используете wp_nav_menu , у вас должна быть вся навигация, предварительно созданная в Admin -> Appearance -> Menus . Вы создаете навигационное меню «на лету»?

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

3. Просто для ясности, неприемлемым решением было бы то, которое выводит все подкатегории для всех категорий, а не текущие подкатегории категорий скрыты? Если это не сработает, я не думаю, что вы сможете выполнить это с помощью wp_nav_menu . Скорее, я думаю, вам пришлось бы написать функцию, которая сначала проверяет, что такое родительский элемент, а затем генерирует меню и отображает подкатегории только для текущего родительского элемента.

Ответ №1:

Если вы создаете подкласс Walker_Nav_Menu класса, вы можете переопределить display_element функцию и условно удалить дочерние элементы элемента до того, как они будут пройдены по циклу.

 if (!$element->current amp;amp; !$element->current_item_ancestor amp;amp; isset( $children_elements[$id])) {
   unset( $children_elements[ $id ] );
}
  

Это приведет к удалению дочерних элементов любого элемента, который не является текущим, поэтому вам нужно будет проверить тип элемента, если вы просто хотите сделать это для категорий. Полный переходник будет выглядеть примерно так:https://gist.github.com/954627

Комментарии:

1. Спасибо за понимание, я не знал о методе display_element в классе Walker. Я пройдусь по этому вопросу чуть позже и сообщу вам о результатах

2. Гениально! Работал достаточно хорошо, чтобы я мог изменить его так, как я хочу! Спасибо.