¿Cómo obtener el menú desplegable de plantillas en los atributos de página de un tipo de entrada personalizada?
Cuando registro mi tipo de entrada personalizada, establezco esto:
'hierarchical' => true,
'supports' => array( 'title','author', 'page-attributes' ),
Por lo tanto, se supone que debo ver 'orden', 'plantillas', 'padres' en el cuadro de Atributos cuando creo una nueva entrada. Sin embargo, no veo que aparezca el desplegable de 'plantillas'. ¿Hay algo más que deba hacer para habilitar la selección de 'plantillas'?

Bien, desde WordPress 4.7 las plantillas personalizadas también están disponibles para tipos de posts personalizados. Al definir una plantilla, debajo del nombre de la plantilla añade otra línea como esta (donde 'product' es tu tipo de post personalizado):
<?php
/*
Nombre de la plantilla: Mi diseño personalizado
Tipo de Post de la Plantilla: post, page, product
*/
// tu código aquí
Y recuerda añadir 'page-attributes' cuando registres tu tipo de post personalizado:
'supports' => array('title', 'page-attributes'),
para mostrar la caja de "Atributos del Post".

Más información sobre esto aquí: https://make.wordpress.org/core/2016/11/03/post-type-templates-in-4-7/

No puedes aplicar plantillas a tipos de contenido personalizados de esta manera. Eso solo aparecerá si el tipo de contenido es 'page' (revisa la línea 568 en wp-admin/includes/meta-boxes.php). Sin embargo, si deseas dar estilo a todos tus tipos de contenido personalizados de la misma manera pero diferente de otros tipos de contenido, podrías usar single-[posttype].php -> http://codex.wordpress.org/images/1/18/Template_Hierarchy.png

¿El menú desplegable de plantillas todavía no es compatible con los tipos de entrada personalizados a partir de la versión 4.1?

Con mi tema, proporciono plantillas "virtuales". No hay archivos específicos {template}.php
en mi tema, así que filtré las plantillas de PÁGINA de la siguiente manera:
function my_virtual_templates( $templates ) {
$my_virtual_templates = array(
'virtual_template_id_1' => 'Plantilla 1',
'virtual_template_id_2' => 'Plantilla 2',
'virtual_template_id_3' => 'Plantilla 3'
);
// Combinar con cualquier plantilla ya disponible
$templates = array_merge( $templates, $my_virtual_templates );
return $templates;
}
add_filter( 'theme_page_templates', 'my_virtual_templates' );
Estaba buscando una forma "sencilla" de agregar el meta box real en un Tipo de Post Personalizado (CPT) cuando me encontré con este post. Como mi nuevo CPT usará este mismo arreglo de plantillas "virtuales", solo necesitaba implementar un meta box para el post.
Usando el filtro theme_{$post_type}_templates automáticamente crea esta área de meta box para mí. Entonces, donde mi CPT se llama my_cpt
agregué el filtro así:
add_filter( 'theme_my_cpt_templates', 'my_virtual_templates');
Ahora, el meta box y el selector aparecen, e incluso puedo cambiarlo en la pantalla de edición masiva ya que todo esto está integrado. ¡Muy práctico!
