The base code is very simple, adjust the page's slug and the theme name:
<?php
/**
* Plugin Name: (SOPT) Theme for page
*/
add_filter( 'template', 'change_theme_wpse_12931' );
add_filter( 'option_template', 'change_theme_wpse_12931' );
add_filter( 'option_stylesheet', 'change_theme_wpse_12931' );
function change_theme_wpse_12931( $template = '' )
{
if( is_page('test-page') )
$template = 'twentyten';
return $template;
}
You'll probably need fine tuning because you might give 404 errors for some features of the original theme and WP will try to look for the alternate theme, my local system is TwentyFourteen and gives this flaw:
Failed to load resource: the server responded with a status of 404 (Not Found) http://example.dev/wp-content/themes/twentyten/genericons/genericons.css
The code is this question in WordPress Developers .
Or, like comments utluiz , you can use a page template with custom header and footer, in this example the template will call the file header-test-page.php
:
<?php
/**
* Template Name: Virtual theme
*/
if( is_page('test-page') )
get_header('test-page');
else
get_header(); ?>