Правильный способ изменения шаблона записи
Я пытаюсь создать опцию на экране редактирования записи (админка) для выбора разных шаблонов записи на основе выбора, и мне нужно ваше мнение, ребята, правильный ли это способ.
Вот что я попробовал и что работает:
Сначала я создаю метабокс с помощью CMB2 Custom Fields
add_action( 'cmb2_init', 'select_template' );
function select_template() {
// Используем подчеркивание, чтобы скрыть поля из списка пользовательских полей
$prefix = '_templatever_';
/* Инициализируем метабокс */
$tempver = new_cmb2_box( array(
'id' => 'template_options',
'title' => __( 'Настройки шаблона', 'idver' ),
'object_types' => array( 'post', ), // Тип записи
'context' => 'side',
'priority' => 'high',
'show_names' => true, // Показывать названия полей слева
) );
$tempver->add_field( array(
'name' => 'Выберите версию',
'id' => 'temp_ver',
'type' => 'select',
'show_option_none' => true,
'options' => array(
'v1' => __( 'Версия 1', 'cmb' ),
),
) );
}
Затем в single.php:
$version = get_post_meta( get_the_ID(), 'temp_ver', true );
if ($version == 'v1') {
get_template_part('single-video');
} else {
}
Теперь, когда я выбираю Версию 1, шаблон меняется на single-video.
Правильный ли это способ сделать это или лучше использовать форматы записей?
Также что лучше для скорости - реализовать код плагина в коде темы или просто установить плагин?
Спасибо

Я думаю, что в целом лучше включить плагин CMB2. Что касается вашего вопроса, есть много способов реализовать это, но ваш подход вполне рабочий. Я бы внес пару изменений. Я бы обновил значения опций, указав названия ваших шаблонов:
'options' => array(
'single-video' => 'Одиночное видео',
),
Затем я бы добавил вспомогательную функцию в functions.php вашей темы:
function idver_get_post_template_part( $post_id ) {
$template = get_post_meta( $post_id, 'temp_ver', 1 );
if ( ! $template ) {
$template = 'default'; // Какой-то резервный шаблон
}
get_template_part( $template );
}
(очевидно, замените 'default' на ваш резервный шаблон. Если резервного шаблона нет, эту функцию нужно немного доработать)
Затем в вашем single.php просто вызовите:
idver_get_post_template_part( get_the_ID() );
