Когда я регистрирую тип записи который будет требовать собственный шаблон - делаю следующим образом (Обратите внимание, это утрированный пример который не может содержать все из этих условий, я добавил их только для демонстрации, global($post) так же необходим только для проверки типа записи):
add_filter('template_include', 'my_template');
function my_template( $template ) {
global $post;
if( $post->post_type == 'book' && is_page('portfolio') && is_category( array( 9, 'Без рубрики', 'php') ) ){
if ( $new_template = locate_template( array( 'page-portfolio.php' ) ) )
return $new_template ;
}
return $template;
}