Как получить выпадающий список шаблонов в атрибутах страницы для произвольного типа записи?
Когда я регистрирую свой произвольный тип записи, я устанавливаю следующее:
'hierarchical' => true,
'supports' => array( 'title','author', 'page-attributes' ),
Таким образом, я предполагаю увидеть 'порядок', 'шаблоны', 'родительские элементы' в блоке Атрибутов при создании новой записи. Однако выпадающий список 'шаблонов' не отображается. Что еще нужно сделать, чтобы включить выбор 'шаблонов'?

Начиная с WordPress 4.7 пользовательские шаблоны стали доступны и для произвольных типов записей. При определении шаблона, после имени шаблона добавьте строку (где 'product' — ваш пользовательский тип записи):
<?php
/*
Template Name: Мой пользовательский макет
Template Post Type: post, page, product
*/
// ваш код здесь
И не забудьте добавить 'page-attributes' при регистрации вашего пользовательского типа записи:
'supports' => array('title', 'page-attributes'),
чтобы отображалась метабокс "Атрибуты записи".

Подробнее об этом здесь: https://make.wordpress.org/core/2016/11/03/post-type-templates-in-4-7/

Вы не можете применять шаблоны к пользовательским типам записей таким образом. Они будут отображаться только если тип записи 'page' (проверьте wp-admin/includes/meta-boxes.php на строке 568). Однако если вы хотите стилизовать все ваши пользовательские типы записей одинаково, но отличным от других типов записей способом, вы можете использовать single-[posttype].php -> http://codex.wordpress.org/images/1/18/Template_Hierarchy.png

Выпадающий список шаблонов всё ещё не поддерживается для пользовательских типов записей в версии 4.1?

В моей теме я предоставляю "виртуальные" шаблоны. В моей теме нет конкретных файлов {template}.php
, поэтому я отфильтровал ШАБЛОНЫ СТРАНИЦ следующим образом:
function my_virtual_templates( $templates ) {
$my_virtual_templates = array(
'virtual_template_id_1' => 'Шаблон 1',
'virtual_template_id_2' => 'Шаблон 2',
'virtual_template_id_3' => 'Шаблон 3'
);
// Объединяем с уже доступными шаблонами
$templates = array_merge( $templates, $my_virtual_templates );
return $templates;
}
add_filter( 'theme_page_templates', 'my_virtual_templates' );
Я искал "простой" способ добавить метабокс для записи в пользовательском типе записи (CPT), когда наткнулся на эту статью. Поскольку мой новый CPT будет использовать этот же массив "виртуальных" шаблонов, мне просто нужно было создать метабокс для записи.
Используя theme_{$post_type}_templates, он автоматически создает для меня этот раздел с метабоксом. Поэтому для моего CPT с названием my_cpt
я добавил фильтр следующим образом:
add_filter( 'theme_my_cpt_templates', 'my_virtual_templates');
Теперь метабокс и селектор отображаются, и я даже могу изменять их на экране массового редактирования, так как это все встроено. Очень удобно!
