Выводим дочерние пункты меню WordPress
Главная страница › Блог › Для разработчиков › Выводим дочерние пункты меню WordPress
Вставляем в functions.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | add_filter( 'wp_nav_menu_objects', 'submenu_limit', 10, 2 ); function submenu_limit( $items, $args ) { if ( empty( $args->submenu ) ) { return $items; } $ids = wp_filter_object_list( $items, array( 'title' => $args->submenu ), 'and', 'ID' ); $parent_id = array_pop( $ids ); $children = submenu_get_children_ids( $parent_id, $items ); foreach ( $items as $key => $item ) { if ( ! in_array( $item->ID, $children ) ) { unset( $items[$key] ); } } return $items; } function submenu_get_children_ids( $id, $items ) { $ids = wp_filter_object_list( $items, array( 'menu_item_parent' => $id ), 'and', 'ID' ); foreach ( $ids as $id ) { $ids = array_merge( $ids, submenu_get_children_ids( $id, $items ) ); } return $ids; } |
Вставляем в нужное место для вывода в шаблоне:
1 2 3 4 5 6 7 | $parent_title = get_the_title($post->post_parent); // получаем title родительского пункта меню $args = array( 'menu_class'=>'my-menu', // класс меню 'theme_location' => 'top_menu', // название меню 'submenu' => $parent_title // переменная с title родительского пункта ); wp_nav_menu($args); |
Если Вам нужно, чтобы выводились только дочерние пункты, а для страниц у которых нет дочерних пунктов, выводить только верхний уровень, делаем так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $children = get_pages(array('child_of' => $post->ID)); // проверяем, есть ли дочерние пункты if($children){ // если есть, выводим только дочерние $parent_title = get_the_title($post->post_parent); // получаем title родительского пункта меню $args = array( 'menu_class'=>'nav nav-list side-menu', // класс меню 'theme_location' => 'main_menu', // название меню 'submenu' => $parent_title // переменная с title родительского пункта ); wp_nav_menu($args); } else { // если нет, выводим только родительские wp_nav_menu( array( 'menu_class'=>'nav nav-list side-menu', // класс меню 'theme_location' => 'main_menu', // название меню 'depth' => 1 // выводим только родительские пункты )); } |
Поделиться: