Adding post excerpt into navigation menu

wp_nav_menu() calls walk_nav_menu_tree() which calls the Walker_Nav_Menu class.

There are a couple of filters you can hook into in those functions but I would take a look at the nav_menu_item_title filter in the Walker_Nav_Menu class. Here is the source:

/**
* Filter a menu item's title.
*
* @since 4.4.0
*
* @param string $title The menu item's title.
* @param object $item  The current menu item.
* @param array  $args  An array of {@see wp_nav_menu()} arguments.
* @param int    $depth Depth of menu item. Used for padding.
*/
$title = apply_filters( 'nav_menu_item_title', $title, $item, $args, $depth );

So you could write a filter like so:

function my_nav_menu_item_title( $title, $item, $args, $depth ) {
    $title .= '<span class="excerpt">' . $item->post_excerpt . '</span>';
    return $title;
}
add_filter( 'nav_menu_item_title', 'my_nav_menu_item_title', 10, 4 );

I haven’t tested this but it should lead you in the right direction. I would inspect what is contained in $item.

tech