Индивидуальный шаблон для отдельной записи произвольного типа в WordPress

19 января 2016 / Комментариев нет

Столкнулся с необходимостью создания индивидуального шаблона для записей произвольного типа.
Если для страницы имеется возможность сходу создать отдельный шаблон, то для отдельных записей (постов) такой возможности по умолчанию нет. За вывод постов отвечает single.php.

В моем случае это были посты произвольного типа movie, шаблон, который их выводил назывался соответственно movie.php.
Нужно было сделать так, чтобы каждая запись из раздела «Movie» могла иметь собственное графическое оформление, реализуемое при помощи встроенного редактора.
Конечно, можно было прибегнуть к использованию Custom Fields, но их пришлось бы создавать очень много.
Поэтому решил, что будет логичнее, если каждая запись обзаведется собственным шаблоном, который можно менять средствами редактора и style.css.

Для того, чтобы появилась возможность создания шаблонов для отдельных постов в виде файлов по аналогии со страницами, в functions.php добавляем фрагмент:

add_filter( 'single_template', function( $template ) {
    global $post;
    if ( $post->post_type === 'movie' ) {
        $locate_template = locate_template( "single-movie-{$post->post_name}.php" );
        if ( ! empty( $locate_template ) ) {
            $template = $locate_template;
        }
    }
    return $template;
} );

В строке 3 'movie' указываем тип записей, для которых необходимо создать поддержку шаблонов.
В 4-й строке "single-movie-{$post->post_name}.php" вид формирования отдельного шаблона для записи.
В данном случае шаблоны будут задаваться по такому виду: single-movie-наименованиезаписи.php.
Теперь для записи, доступной по адресу movie/robocop3/
Мы создаем шаблон single-movie-robocop3.php и помещаем его в корневую папку темы.
Индивидуальный шаблон для этой записи создан, можем наполнять и оформлять его.
Аналогичным способом создаем шаблоны для других записей.

Минус метода в том, что при наличии большого числа записей будет соответствующее число шаблонов, но с точки зрения оформления, оно того стоит!


Комментариев нет

* - обязательные поля

Добавить комментарий