Выводим дочерние пункты меню WordPress

Вставляем в functions.php:

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;
}

Вставляем в нужное место для вывода в шаблоне:

$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);

Если Вам нужно, чтобы выводились только дочерние пункты, а для страниц у которых нет дочерних пунктов, выводить только верхний уровень, делаем так:

$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 // выводим только родительские пункты
	));
}

 

Другие статьи

Быстрая связь