Problem is that the function you use run after http header are sent, so it can't redirect.
You have to use another way.
Setup the menu using doing-nothing function, just like '__return_false'
, and then use another function to redirect to home page if the $_GET['page']
is = to your menu slug on admin init (before headers are sent):
add_action('admin_menu', 'register_web_menu_page');
function register_web_menu_page() {
add_menu_page('View My Website', 'View My Website', 'add_users', 'web_menu_page', '__return_false', '', null, 9);
}
add_action('admin_init', 'redirect_to_site', 1);
function redirect_to_site() {
if ( isset($_GET['page']) && $_GET['page'] == 'web_menu_page' ) {
wp_redirect( home_url() );
exit();
}
}