Почему мой WP_Nav_Menu не возвращает false?

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

Проблема в том, что функция всегда возвращается либо с элементами меню (когда это предполагается), либо с пустым списком, когда ничего не видно. Мне нужно это (и подумал, что это) вернет ложь.

Вот мой код.

 // Capture submenu as a variable $args = array( 'theme_location' => $in_menu, 'echo' => '0', 'sub_menu' => true, 'fallback_cb' => 'coepio_return_false' ); // Note I've also tried 'fallback_cb' => false with the same result $submenu = wp_nav_menu( $args ); // If the menu exists if( $submenu ) { ?> <div id="submenu" class="sidebar cf" role="navigation"> <div class="widget"> <div id="submenu-title" class="widget-title"> <h4>In This Section</h4> </div> <div class="widget-content"> <?php echo $submenu; ?> </div> </div> </div><!-- #submenu --> <?php } 

Если вы заметили, что 'sub_menu' => true вас есть хороший глаз. Вот код для этого.

 // Submenus - required for the submenu (above) to work // filter_hook function to react on sub_menu flag function coepio_submenu( $sorted_menu_items, $args ) { if ( isset( $args->sub_menu ) ) { $root_id = 0; // find the current menu item foreach ( $sorted_menu_items as $menu_item ) { if ( $menu_item->current ) { // set the root id based on whether the current menu item has a parent or not $root_id = ( $menu_item->menu_item_parent ) ? $menu_item->menu_item_parent : $menu_item->ID; break; } } $menu_item_parents = array(); foreach ( $sorted_menu_items as $key => $item ) { // init menu_item_parents if ( $item->ID == $root_id ) $menu_item_parents[] = $item->ID; if ( in_array( $item->menu_item_parent, $menu_item_parents ) ) { // part of sub-tree: keep! $menu_item_parents[] = $item->ID; } else { // not part of sub-tree: away with it! unset( $sorted_menu_items[$key] ); } } return $sorted_menu_items; } else { return $sorted_menu_items; } } add_filter( 'wp_nav_menu_objects', 'coepio_submenu', 10, 2 ); 

Solutions Collecting From Web of "Почему мой WP_Nav_Menu не возвращает false?"

он не возвращает false, потому что меню существует в каждом случае, вы просто отключите все пункты меню. вы не устанавливаете items_wrap , поэтому по умолчанию используется оболочка ul . возможно, попробуйте удалить его, установив его явно только на дочерние элементы:

 'items_wrap' => '%3$s' 

обратите внимание, что вам придется вручную обернуть ваше меню в тегах ul в этом случае.

Я столкнулся с этой проблемой, и моя ошибка была связана с другим кодом, который я написал ошибочно. У меня был следующий код, обрабатывающий запрос $:

 function qd_post_queries( $query ) { if(is_tax('qd_locations')){ $query->set('post_type','qd_program'); } } add_action( 'pre_get_posts', 'qd_post_queries' ); 

Это привело к захвату КАЖДОГО запроса на странице таксономии, включая призывы к навигации. Мне нужно было добавить is_main_query() в if для решения проблемы:

 if(is_tax('qd_locations') && $query->is_main_query())