Swapping the menus can be done using the wp_nav_menu_args
filter.
For example:
add_filter( 'wp_nav_menu_args', 'db_switch_menus' );
function db_switch_menus( $args ) {
if( 'primary' === $args['theme_location'] && is_single() ) {
$args['menu'] = '99';
}
return $args;
}
Where primary
is the Navigation, and 99
is the ID of the Menu you want displayed if the is_single()
condition is met ie. its a Single Post.
Aside from the nice UI and the complex conditional logic rules that the plugins provide, they probably also deal with transients, caching and a host of other things that should be considered that are out of my pay grade lol