Yep, this is definitely possible. Grab your post types and insert them in $post_types
to loop through every one of them to manually generate the archives and posts:
<?php
// post types of your choice
$post_types = array( 'page', 'work', 'people' );
$wp_cats = array();
foreach ( $post_types as $post_type ) {
$pages = get_pages( array( 'post_type'=>$post_type, 'posts_per_page'=>-1, 'post_status'=>'publish', 'depth'=> 0 ) );
$obj = get_post_type_object( $post_type );
// output custom post type archive with link
echo '<a href="' . get_post_type_archive_link( $post_type ) . '">' . $obj->labels->singular_name . '</a><br />';
foreach ( $pages as $page ) {
$wp_cats[$page->ID] = $page->post_title;
// output posts with link
echo '<a href="' . get_permalink($page->ID) . '">' . $page->post_title . '</a><br />';
}
}
?>
Note: As you can see this will output plain links; I think you can easily adjust the HTML-markup yourself as you didn’t request something special in your question.
You can also auto-generate the structure via wp_list_pages(), but this is sometimes getting tricky if you’ll need a custom HTML-markup:
<?php
// post types of your choice
$post_types = array( 'page', 'work', 'people' );
foreach ( $post_types as $post_type ) {
// generate complete list links and titles
wp_list_pages( array( 'post_type'=>$post_type, 'title_li'=>$post_type ) );
}
?>