Você deve estar usando o filtro template_include para isso:
add_filter('template_include', 'wpse_44239_template_include', 1, 1);
function wpse_44239_template_include($template){
global $wp_query;
//Do your processing here and define $template as the full path to your alt template.
return $template;
}
template_redirect
é a ação chamada diretamente antes dos cabeçalhos serem enviados para a saída do modelo renderizado. É um gancho conveniente para fazer redirecionamentos 404, etc ... mas não deve ser usado para incluir outros caminhos de modelos, pois o WordPress faz isso de forma inata com o filtro 'template_include'.
template_include
e single_template
lidam APENAS com o caminho do modelo usado para renderizar o conteúdo. Este é o local adequado para ajustar um caminho de modelo.
Atualize o comentário de @ChipBennett:
single_template
foi removido a partir de 3.4. Use {posttype} _template em seu lugar.