в functions.php
function menu_childs_only( $items, $args ) {
if ( empty($args->childs_only) ) // если параметр не был передан
return $items; // обычный вывод меню
$newitems = array(); // подготовим пустые массивы
$ids = array(); // здесь будут id всех активных пунктов
foreach ( $items as $key => $item ) { // пробегаем по каждому элементу, этот
if ( $item->current ) { // если элемент активный
if ($item->menu_item_parent != 0) { // и если есть родительский элемент
$ids[] = $item->menu_item_parent; // пишем его в массив
}
}
}
foreach ( $items as $key => $item ) { // пробежим еще раз
if (in_array($item->menu_item_parent, $ids)) { // если id есть среди активных id
$newitems[] = $item; // пишем весь элемент в массив новых элементов
if ($item->current) { // если элемент активный
$ids[] = $item->ID;
}
}
}
return $newitems; // возвращаем отфильтрованные элементы меню
}
add_filter( 'wp_nav_menu_objects', 'menu_childs_only', 10, 2 ); // хук
в шаблоне
wp_nav_menu( array(
'childs_only' => 1, // тот самый параметр, который выводит отфильтрованное меню
) );