I do a similar thing to this on a couple of sites using sidebars, custom menus and widgets.
Fist you have to register extra sidebars (widget areas) in functions.php
You can then place those sidebars into the pages where you want them.
My sidebar.php contains this code
<?php
if ( is_user_logged_in() ) {
if ( is_active_sidebar( 'sidebar-10' ) ) {
dynamic_sidebar( 'sidebar-10' );
}
} else {
if ( is_active_sidebar( 'sidebar-11' ) ) {
dynamic_sidebar( 'sidebar-11' );
}
}
?>
This displays sidebar 10 for a logged in user and sidebar 11 for a non-logged in user.
You can then create custom menus for each (if your theme supports this) through Appearance > Menus
And add menu widgets to the corresponding sidebars to display accordingly to whether a user is logged in or out.
If you want to change the main menu at the top of the page it should be possible by registering a second menu in functions.php e.g.:
register_nav_menu( 'top-level', __( 'Logged out menu', 'themename' ) );
register_nav_menu( 'sub-level-loggedin', __( 'logged in menu', 'themename' ) );
Then use a variant on the previous code to alter header.php where it calls in the main nav menu:
if ( is_user_logged_in() ) {
<?php wp_nav_menu( array( 'theme_location' => 'sub-level-loggedin' ) ); ?>
} else {
<?php wp_nav_menu( array( 'theme_location' => 'top-level' ) ); ?>
}
I’ve done this on the fly so I haven’t tested it, but I don’t see why it wouldn’t work…!
Hope this helps…