Правильный способ изменения шаблона записи

27 июл. 2015 г., 03:05:44
Просмотры: 101
Голосов: 0

Я пытаюсь создать опцию на экране редактирования записи (админка) для выбора разных шаблонов записи на основе выбора, и мне нужно ваше мнение, ребята, правильный ли это способ.

Вот что я попробовал и что работает:

Сначала я создаю метабокс с помощью 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.

Правильный ли это способ сделать это или лучше использовать форматы записей?

Также что лучше для скорости - реализовать код плагина в коде темы или просто установить плагин?

Спасибо

0
Все ответы на вопрос 1
0

Я думаю, что в целом лучше включить плагин 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() );
15 мар. 2016 г. 03:32:58