Have you tried this:
<?php
add_action( 'template_redirect', 'wp138320_template_redirect' );
function wp138320_template_redirect()
{
if ( ! current_user_can( 'manage_options' ) )
{
include( get_template_directory() . '/holding.php' );
exit;
}
}
?>
I’m currently working on a site that has issues with hooking into actions/filters like that too, changing it to something like the code above did the trick in that install.
—- edit:
Using the hook @Pieter mentions:
<?php
add_filter( 'template_include', 'wp138320_template_include' );
function wp138320_template_include( $template )
{
if ( ! current_user_can( 'manage_options' ) )
{
if ( '' != locate_template( 'holding.php' ) )
return 'holding.php'; // holding.php should be in the root of your theme's folder
}
return $template;
}
?>