#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. Гениально! Работал достаточно хорошо, чтобы я мог изменить его так, как я хочу! Спасибо.