Come ottenere il menu a discesa dei template negli attributi di pagina di un custom post type?
Quando registro il mio custom post type, imposto questo:
'hierarchical' => true,
'supports' => array( 'title','author', 'page-attributes' ),
Quindi, dovrei vedere 'ordine', 'template' e 'genitore' nel box Attributi quando creo un nuovo post. Tuttavia, non vedo apparire il menu a discesa dei 'template'. C'è qualcos'altro che dovrei fare per abilitare la scelta dei 'template'?

Bene, a partire da WordPress 4.7 i template personalizzati sono disponibili anche per i custom post type. Quando si definisce un template, sotto il nome del template aggiungi un'altra riga come la seguente (dove 'product' è il tuo custom post type):
<?php
/*
Template Name: Il mio layout personalizzato
Template Post Type: post, page, product
*/
// il tuo codice qui
e ricorda di aggiungere 'page-attributes' quando registri il tuo custom post type:
'supports' => array('title', 'page-attributes'),
per visualizzare il box "Attributi articolo".

Maggiori informazioni qui: https://make.wordpress.org/core/2016/11/03/post-type-templates-in-4-7/

Non puoi applicare i template ai tipi di post personalizzati in questo modo. Questo apparirà solo se il tipo di post è 'page' (controlla la riga 568 di wp-admin/includes/meta-boxes.php). Tuttavia, se vuoi stilizzare tutti i tuoi tipi di post personalizzati nello stesso modo ma diversamente dagli altri tipi di post, potresti usare single-[posttype].php -> http://codex.wordpress.org/images/1/18/Template_Hierarchy.png

Il menu a discesa dei template non è ancora supportato nei custom post type con la versione 4.1?

Con il mio tema, fornisco template "virtuali". Non ci sono file specifici {template}.php
nel mio tema, quindi ho filtrato i template di PAGINA in questo modo:
function my_virtual_templates( $templates ) {
$my_virtual_templates = array(
'virtual_template_id_1' => 'Template 1',
'virtual_template_id_2' => 'Template 2',
'virtual_template_id_3' => 'Template 3'
);
// Unisci con qualsiasi template già disponibile
$templates = array_merge( $templates, $my_virtual_templates );
return $templates;
}
add_filter( 'theme_page_templates', 'my_virtual_templates' );
Cercavo un modo "semplice" per aggiungere l'effettivo meta box del post su un Custom Post Type (CPT) quando mi sono imbattuto in questo post. Dato che il mio nuovo CPT utilizzerà questo stesso array di template "virtuali", avevo solo bisogno di implementare un meta box per il post.
Utilizzando il filtro theme_{$post_type}_templates viene automaticamente creata questa area del meta box per me. Quindi, dove il mio CPT si chiama my_cpt
ho aggiunto il filtro in questo modo:
add_filter( 'theme_my_cpt_templates', 'my_virtual_templates');
Ora, il meta box e il selettore vengono visualizzati, e posso persino modificarlo nella schermata di modifica multipla poiché tutto questo è già integrato. Molto utile!
